मेरा आवेदन एक vb6 निष्पादन योग्य है, लेकिन सिस्टम में कुछ नए रूप सी # में लिखे गए हैं। मैं मुख्य अनुप्रयोग विंडो में हैंडल का उपयोग करके सी # फॉर्म की मालिक संपत्ति सेट करने में सक्षम होना चाहता हूं, ताकि मेरे ऐप और अन्य ऐप्स के बीच आगे और पीछे टैबबिंग करते समय संवाद शीर्ष पर बने रहें।क्या मुझे अपने WinForms फॉर्म के मालिक को Hwnd/NativeWindow का उपयोग करके सेट करने का व्यवहार मिल सकता है?
मैं मुख्य एप्लिकेशन विंडो का hwnd प्राप्त कर सकता हूं। मुझे यकीन नहीं है कि मैं वहां से क्या कर सकता हूं?
अद्यतन अक्टू 20 '08 17:06 पर:
स्कॉट,
प्रतिक्रिया के लिए धन्यवाद। मैंने अनदेखा किया था कि शो/शोडियलॉग विधि पैरामीटर प्रकार का नहीं था - मैं केवल मालिक की संपत्ति पर देख रहा था।
मैंने उपरोक्त से उपयोग किए जा रहे कोड को थोड़ा संशोधित किया है - हमारे पास एक घटक है जो आम तौर पर हमारे फॉर्म लोड करता है और ShowDialog को कॉल करता है। मेरे कोड इस तरह दिखता है:
private IWin32Window GetWindowFromHost(int hwnd)
{
IWin32Window window = null;
IntPtr handle = new IntPtr(hwnd);
try
{
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(handle);
window = nativeWindow;
}
finally
{
handle = IntPtr.Zero;
}
return window;
}
दुर्भाग्य से यह नहीं कर रहा है कि मैं क्या आशा व्यक्त की थी:
Form launchTarget = FormFactory.GetForm(xxx); // psuedo-code for generic form loader
launchTarget.StartPosition = FormStartPosition.CenterParent;
IWin32Window parentWindow = GetWindowFromHwnd(hwnd);
launchTarget.ShowDialog(parentWindow);
GetWindowFromHwnd
अपने कोड की एक विधि-लिपटे संस्करण है। फॉर्म सामान्य रूप से प्रदर्शित होता है, लेकिन यह सही स्थिति में दिखाई नहीं दे रहा है और न ही जब भी मैं टैबलेट विंडो पर वापस जाता हूं और फिर भी शीर्ष पर रहता हूं। हमारे मॉडल टास्कबार में कोई कार्य नहीं दिखाते हैं, इसलिए खिड़की प्रतीत होता है "गायब हो जाता है" (हालांकि यह अभी भी alt-tab विंडो सूची में मौजूद है)। मेरे लिए यह इंगित करता है कि मेरे पास सही hwnd नहीं हो सकता है। यदि आपके पास कोई अन्य सुझाव है, तो कृपया उत्तर दें। एक बार फिर धन्यवाद।
अद्यतन नवंबर 10 '08 16:25
एक अनुवर्ती टिप्पणी पर - आप इसे बाहर कारक हैं एक कोशिश/अंत में, स्कॉट की 2 पोस्ट में के रूप में, कॉल में एक विधि कॉल में अंत में ब्लॉक में होना चाहिए:
parentWindow.ReleaseHandle();
स्कॉट - लंबी देरी के लिए खेद है, अन्य चीजों पर खींच लिया गया है। आपका मूल सबमिट उत्तर बहुत अच्छा काम करता है। मुझे Form.Owner को सेट करने के बजाय ShowDialog के माध्यम से मूलविंडो को पास करने की आवश्यकता थी। मेरी दूसरी समस्या कॉलिंग कोड पहली जगह में सही एचडब्ल्यूएनडी नहीं पारित कर रहा था। धन्यवाद – mcw0933
एफवाईआई, उपर्युक्त दोनों समस्याएं हल करने योग्य हैं - केंद्र के लिए सेट करने के लिए सुनिश्चित करें: "form.StartPosition = FormStartPosition.CenterParent" - toppyness के लिए सेट करना सुनिश्चित करें: form.TopMost = true; - बीटीडब्ल्यू, रिलीजहैंडल() पर जानकारी के लिए धन्यवाद! :-) – BrainSlugs83