2010-02-18 24 views
8

मैं खिड़की हमेशा एक और खिड़की के शीर्ष पर कैसे रह सकता हूं जो पहले से ही हमेशा शीर्ष पर रहता है? ऐसा नहीं है कि इसे अन्य सभी खिड़कियों के शीर्ष पर रहना है, मुझे बस एक विशेष विंडो के शीर्ष पर रहने की आवश्यकता है।खिड़की हमेशा एक और खिड़की के शीर्ष पर बने रहें जो पहले से ही शीर्ष पर रहती है?

उत्तर

15

स्लाक्स के उत्तर और इसके बारे में कुछ टिप्पणियों के लिए धन्यवाद, मैं यह समझने में सक्षम था कि मेरे रूपों के बीच एक बच्चे के माता-पिता के संबंध कैसे स्थापित किए गए हैं। मैं Form.Show(owner) का उपयोग नहीं कर सका, क्योंकि जिस फॉर्म में मैं आगे रहना चाहता था, से पहले अन्य रूप दिखाया गया था। मैंने Form.Show(owner) के पीछे कोड की जांच करने के लिए परावर्तक का उपयोग किया और पाया कि दृश्यों के पीछे, यह सभी विंडोज एपीआई में SetWindowLong तक हल हो गया है।

LONG SetWindowLong(  
    HWND hWnd, 
    int nIndex, 
    LONG dwNewLong 
); 

Form.Show(owner) कॉल -8 के nIndex साथ SetWindowLong। एमएसडीएन ऑनलाइन दस्तावेज आपको इसके बारे में नहीं बताएगा, लेकिन Winuser.h के अनुसार nIndex के लिए उपलब्ध स्थिरांक में से एक GWL_HWNDPARENT है, जिसका -8 का मान है। एक बार जब मैं इन बिंदुओं को जोड़ता हूं, तो समस्या हल करने में काफी आसान थी।

यह निम्न खिड़की के माता-पिता को कैसे निर्धारित करें, भले ही वह पहले से ही दिखाया जाता है:

using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
public static extern int SetWindowLong(HandleRef hWnd, int nIndex, HandleRef dwNewLong); 

public static void SetOwner(IWin32Window child, IWin32Window owner) 
{ 
    NativeMethods.SetWindowLong(
     new HandleRef(child, child.Handle), 
     -8, // GWL_HWNDPARENT 
     new HandleRef(owner, owner.Handle)); 
} 
+0

अपना समाधान पोस्ट करने के लिए धन्यवाद। यह अच्छा है! –

2

Don't do this

यह कहा गया है कि, आप अपनी खिड़की को दूसरे के बच्चे बनाकर ऐसा करने में सक्षम होना चाहिए।

+1

मुझे लगता है कि ब्लॉग पोस्ट को देखा है, लेकिन मैं नहीं कर रहा हूँ, जिसका अर्थ है मैं खिड़की शीर्ष पर रहने के लिए चाहते हैं कि अन्य सभी खिड़कियों के बारे में, सिर्फ एक विशेष पर। –

+1

हां, अगर आपकी पहली मोडल विंडो स्वयं एक और मोडल विंडो उत्पन्न करती है, तो यह शीर्ष विंडो पर सबसे नया बन जाएगा। लेकिन अब आपके पास मूल विंडो है, और पहली मोडल विंडो नई मोडल विंडो के पीछे बैठी है और उन्हें स्थानांतरित या खींचा नहीं जा सकता है, जो उपयोगकर्ता को किसी भी विंडो के पीछे छिपी हुई जानकारी की आवश्यकता होने पर निराशाजनक हो सकता है। – AaronLS

+0

@ हारून: वह एक मोडल विंडो नहीं बना रहा है। – SLaks

संबंधित मुद्दे