2009-10-12 12 views

उत्तर

32

आप OpenForms संग्रह से अधिक interate अगर वहाँ पहले से ही दिए गए प्रकार का एक रूप है की जाँच करने के कर सकते हैं:

foreach (Form form in Application.OpenForms) 
{ 
    if (form.GetType() == typeof(MyFormType)) 
    { 
     form.Activate(); 
     return; 
    } 
} 

Form newForm = new MyFormType(); 
newForm.MdiParent = this; 
newForm.Show(); 
+0

का उल्लंघन नहीं करता है। सक्रिय करें() फॉर्म का उपयोग करें। WindowState = FormWindowState.Normal; पूर्व के विपरीत, उत्तरार्द्ध काम करेगा, भले ही वह खिड़की कम हो। – docesam

3

AFAIK वहाँ कोई मानक तरीका है। आपको इसे स्वयं लागू करना होगा। मैं इसे इस तरह से करना चाहते हैं: धागा सुरक्षा चिंता का विषय है

class TheForm: Form 
{ 
    private static TheForm Instance; 

    private TheForm() // Constructor is private 
    { 
    } 

    public static Show(Form mdiParent) 
    { 
     if (Instance == null) 
     { 
      // Create new form, assign it to Instance 
     } 
     else 
      Instance.Activate(); // Not sure about this line, find the appropriate equivalent yourself. 
    } 

    protected override OnFormClose(EventArgs e) 
    { 
     Instance = null; 
     base.OnFormClose(e); 
    } 
} 

, तो उपयुक्त lock रों जोड़ें।

+0

थ्रेड सुरक्षा एक समस्या के बाद से आप केवल एक ही धागे से जीयूआई नियंत्रण का उपयोग नहीं होना चाहिए, । – Groo

+0

आप जोड़ सकते थे कि यह सिंगलटन पैटर्न का कार्यान्वयन है। मैं फ्रेड्रिक मोर्क के समाधान को प्राथमिकता देता हूं, यह फॉर्म के बजाय एसओसी –

1

इस कोड

private void openToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     foreach (Form form in Application.OpenForms) 
     { 


      if (form.GetType() == typeof(Form2)) 
      { 
       form.Activate(); 
       return; 
      } 
     } 

     Form2 newForm = new Form2(); 
     newForm.MdiParent = this; 
     newForm.Show(); 
    } 
0

काम कर रहा है हालांकि इस पोस्ट बहुत पुराना है, मैंने सोचा था कि यह एक मदद जोड़ देगा।

फॉर्म को कम करने के लिए भी संभाल करने की आवश्यकता है। यहाँ पूरा उदाहरण है:

foreach (Form form in this.MdiChildren) 
{ 
    if (form.GetType() == typeof(frmMain)) 
    { 
     if (form.WindowState == FormWindowState.Minimized) 
     { 
      form.WindowState = FormWindowState.Normal; 
     } 
     form.Activate(); 
     return; 
    } 
} 
Form frm = new frmMain(); 
frm.MdiParent = this; 
frm.Show(); 
0

vb.net में मेरे लिए इस कोड को काम

For Each f As Form In Application.OpenForms If TypeOf f Is form_name Then f.Activate() f.WindowState = FormWindowState.Normal f.StartPosition = FormStartPosition.WindowsDefaultLocation f.WindowState = FormWindowState.Maximized

  Return 
     End If  
    Next 
    form_name .MdiParent = Me 
    form_name .Show() 

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