क्या एमडीआई कंटेनर के भीतर किसी निश्चित रूप को खोलने से रोकने का कोई तरीका है यदि यह कहा गया है कि फॉर्म पहले ही खोला गया है?डुप्लिकेट एमडीआई बच्चों को रोकें
उत्तर
आप 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();
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
रों जोड़ें।
थ्रेड सुरक्षा एक समस्या के बाद से आप केवल एक ही धागे से जीयूआई नियंत्रण का उपयोग नहीं होना चाहिए, । – Groo
आप जोड़ सकते थे कि यह सिंगलटन पैटर्न का कार्यान्वयन है। मैं फ्रेड्रिक मोर्क के समाधान को प्राथमिकता देता हूं, यह फॉर्म के बजाय एसओसी –
इस कोड
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();
}
काम कर रहा है हालांकि इस पोस्ट बहुत पुराना है, मैंने सोचा था कि यह एक मदद जोड़ देगा।
फॉर्म को कम करने के लिए भी संभाल करने की आवश्यकता है। यहाँ पूरा उदाहरण है:
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();
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()
का उल्लंघन नहीं करता है। सक्रिय करें() फॉर्म का उपयोग करें। WindowState = FormWindowState.Normal; पूर्व के विपरीत, उत्तरार्द्ध काम करेगा, भले ही वह खिड़की कम हो। – docesam