2010-11-17 13 views
7

मेरे पास तीन रूप हैं।सभी खुले रूपों को छिपाएं

चलें कहना ए, बी, सी

प्रपत्र ए खोलता प्रपत्र बी और फार्म बी तो प्रपत्र सी खोलता

मैं बटन छिपाएं जोड़ लिया है सभी खुले रूपों प्रपत्र सी में

अब मैं इस बटन के साथ सभी तीन रूपों को कैसे छिपा सकता हूं?

मुझे पता है कि शोविंडो एपी का उपयोग करने का एक तरीका है, लेकिन मैं एपीआई कॉल का उपयोग नहीं करना चाहता हूं।

संपादित करें:SoMoS के लिए धन्यवाद।

for (int i = Application.OpenForms.Count - 1; i >= 0; i += -1) 
{ 
    if (!object.ReferenceEquals(Application.OpenForms[i], this)) 
    { 
      Application.OpenForms[i].Hide(); 
    } 
} 
this.Hide(); 

या

प्रपत्र एक में (ho1 करने के लिए धन्यवाद)

B frm = new B(); 
frm.Owner = this; 
frm.Show(); 

प्रपत्र बी

C frm = new C(); 
frm.Owner = this; 
frm.Show(); 

में प्रपत्र सी बटन क्लिक करें घटना में।

Owner.Owner.Hide(); 
Owner.Hide(); 
Hide(); 

या धन्यवाद Wim Coenen

foreach (Form var in Application.OpenForms) 
{ 
    var.Hide(); 
} 

के लिए धन्यवाद।

+3

अजीब है कि कैसे आप एक सी पहचान सकते हैं ++ प्रोग्रामर तुरंत तरह वे लिखने से: तो एक बार C.Owner = बी, B.Owner = एक, तुम बस (ए में अपने हैंडलर क्लिक करें) इस्तेमाल कर सकते हैं उनके सी # loops। क्यों न सिर्फ 'foreach (आवेदन में v var फॉर्म। ओपनफॉर्म) फार्म। हाइड(); '? –

+0

@Wim Coenen सुझाव के लिए धन्यवाद। – Searock

उत्तर

7

तुम सिर्फ इस संग्रह का उपयोग करने की जरूरत है ।

उम्मीद है कि यह मदद करता है।

3

यह काम करता है:

Owner.Owner.Hide(); 
Owner.Hide(); 
Hide(); 

या यदि आप अनिश्चित हैं कि कितने रूपों वहाँ श्रृंखला में होगा तुम सिर्फ एक पुनरावर्ती विधि हो सकता था।

हालांकि यह बी पर बी पर निर्भर करता है, जिसे आप this पर Show पर कॉल के पैरामीटर के रूप में भेजकर व्यवस्थित कर सकते हैं जब आप फॉर्म दिखाते हैं। तुम सिर्फ सभी वस्तुओं से अधिक पुनरावृति और जिन्हें आप चाहते हैं (उदाहरण के लिए शीर्षक से जांच कर सकते हैं) को छिपाने के लिए की जरूरत है या सिर्फ उन सभी को छिपाने फिर

Application.OpenForms 

:

+0

मुझे नहीं पता कि मुझे एक त्रुटि क्यों मिल रही है "ऑब्जेक्ट रेफरेंस किसी ऑब्जेक्ट के इंस्टेंस पर सेट नहीं है।" क्या यह केवल एमडीआई रूपों के साथ काम करता है? – Searock

+0

यदि आप उस ऑब्जेक्ट की विधि को कॉल करने का प्रयास कर रहे हैं, तो उस त्रुटि को प्राप्त होगा, उदाहरण के लिए यदि किसी फॉर्म में स्वामी नहीं है। –

+0

प्रपत्रों में कोई स्वामी नहीं है क्योंकि वे संवाद रूप नहीं हैं। एक और तरीका इस्तेमाल किया जाना है। –

0

सभी रूपों को छिपाने के बजाय, आप इस तथ्य का उपयोग कर सकते हैं कि एक फॉर्म को कम करने, स्वचालित रूप से अपने सभी बच्चों के रूपों को कम करता है।

WindowState = FormWindowState.Minimized 
-2
Form2 NewForm = new Form2(); 
this.Hide(); //Hide Current form 
NewForm..ShowDialog(); //Show new form 
this.Show(); //Show Previous form After close new form 
संबंधित मुद्दे