2009-07-14 13 views
7

मैं एक जीत फॉर्म आवेदन के एकीकरण परीक्षण ड्राइविंग के लिए एक छोटी कक्षा लिख ​​रहा हूँ। परीक्षण चालक वर्ग के पास मुख्य फॉर्म तक पहुंच है और उस नियंत्रण को देखता है जिसे नाम से उपयोग करने की आवश्यकता होती है, और परीक्षण को चलाने के लिए इसका उपयोग करती है। नियंत्रण खोजने के लिए मैं Control.Controls पेड़ को घुमा रहा हूं। हालांकि, जब मैं एक संवाद विंडो (एक संवाद के रूप में दिखाया गया एक कस्टम रूप) में नियंत्रण प्राप्त करना चाहता हूं तो मैं अटक जाता हूं। मैं इसे कैसे पकड़ सकता हूं?मैं वर्तमान में सक्रिय मोडल फ़ॉर्म का संदर्भ कैसे प्राप्त कर सकता हूं?

उत्तर

20

आप स्थिर Form.ActiveForm संपत्ति का उपयोग करके वर्तमान में सक्रिय रूप का संदर्भ प्राप्त कर सकते हैं।

संपादित करें: यदि Form पर ध्यान केंद्रित नहीं है, Form.ActiveFormnull वापस आ जाएगा।
एक तरीका यह चारों ओर पाने के लिए Application.OpenForms संग्रह का उपयोग करें और, डायन सक्रिय Form जब यह ShowDialog का उपयोग कर प्रदर्शित किया जाता है हो जाएगा पिछले आइटम को पुनः प्राप्त करने के लिए है:

// using Linq: 
lastOpenedForm = Application.OpenForms.Cast<Form>().Last() 
// or (without Linq): 
lastOpenedForm = Application.OpenForms[Application.OpenForms.Count - 1] 
+0

के रूप में दिखाए जाते हैं, ऐसा लगता है कि जो भी मैं करता हूं वह शून्य हो जाता है। कोई विचार? – Grzenio

+0

कोई फॉर्म फोकस नहीं होने पर अपडेट किया गया जवाब –

+0

एप्लिकेशन। ओपनफॉर्म काम करता है, चीयर्स – Grzenio

0

मुझे यकीन नहीं है कि क्या आप प्री-बिल्ट डायलॉग बॉक्स पर नियंत्रण एक्सेस कर सकते हैं; वे सब एक साथ पैक लगते हैं। आपके पास अपने आप के एक संवाद बॉक्स का निर्माण करने के लिए और अधिक किस्मत हो सकती है जो आप इसे करना चाहते हैं। फिर आप इसके अंदर नियंत्रण को एक्सेस कर सकते हैं।

+0

हां, मैं कस्टम फॉर्म का उपयोग कर रहा हूं जो एक संवाद बॉक्स – Grzenio

0

मुझे सही अगर मैं गलत हूँ, हालांकि, ऐसा लगता है कि आप संभावित रूप से संवाद फ़ॉर्म पर नियंत्रण तक पहुंचने का प्रयास कर रहे हैं, जब यह संभव नहीं है।

मेरा मतलब यह है कि, ShowDialog उस धागे को "पकड़" रखेगा जिस पर फॉर्म बनाया गया था और ShowDialog तक प्रसंस्करण समाप्त हो गया है, इस मामले में आपका उपयोगकर्ता कोड अपने रास्ते पर जारी रहेगा।

एक अलग थ्रेड से नियंत्रणों को एक्सेस करने या छेड़छाड़ करने का प्रयास करें (इस मामले में, परीक्षण ड्राइवर वर्ग को प्रत्येक नए रूप के लिए एक अलग धागे को फैलाने के लिए दोबारा प्रदर्शित करें जिसे परीक्षण और परीक्षण किया जाना चाहिए)।

+0

हां, मैंने एक नया धागा बनाया है, इसलिए इसे अवरुद्ध नहीं किया गया है। मैं @ जुलिएन पॉलिन – Grzenio

+0

द्वारा दिए गए उत्तर की तलाश में था, यदि आप माता-पिता के रूप में निपटान करते हैं तो निपटान विधि भी सक्रिय मोडल फॉर्म के साथ चलती है। यह संभव है कि आप तब मोडल फॉर्म तक पहुंचना चाहें। – mike100111

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

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