2010-02-01 24 views
6

मैं एकाधिक रूपों को खोलने से कैसे रोकूं?एकाधिक फॉर्म उदाहरणों को रोकें

मैं करता हूं। फॉर्म पर दिखाएं लेकिन उपयोगकर्ता मुख्य रूप और बटन को फिर से क्लिक कर सकता है और फॉर्म का दूसरा उदाहरण खुलता है।

उत्तर

2

दो विकल्प हैं, आप क्या जरूरत पर निर्भर करता है:

  1. उपयोग Show के बजाय ShowDialog है, जो एक मॉडल विंडो खुलेगा। यह स्पष्ट समाधान है यदि आपको बच्चे के रूप में खुला होने पर सक्रिय होने के लिए अपने मुख्य रूप की आवश्यकता नहीं है।

  2. या उस विंडो का ट्रैक रखें जिसे आपने पहले से ही मुख्य रूप में खोला है और यदि यह पहले से ही खुला है तो कुछ भी नहीं करें। यदि आप चाहते हैं कि उपयोगकर्ता मुख्य फॉर्म का उपयोग करने में सक्षम हो, तो बच्चे की फॉर्म पहले से ही खुली हो सकती है, शायद अन्य रूपों को खोलने के लिए।

0

मुख्य रूप से अक्षम करें जब तक कि बच्चे का फॉर्म दूर न हो जाए, या बटन को अक्षम न करें।

button_onClick(object Sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    btn.Enabled = false; 
    Form myform = new MyForm(); 
    myform.Show(); 
} 
बेशक

, तुम सच में form.ShowDialog() बल्कि form.Show() से उपयोग करना चाहिए अगर आप मॉडल व्यवहार चाहते हैं।

2

की तरह कुछ है: सिंगलटन पैटर्न

+0

यह बेहतर है, लेकिन यह उपयोगकर्ता को गलती से या जानबूझकर मुख्य रूप से सामने के रूप में लाने से नहीं रोकता है। –

+0

उसने यह नहीं कहा कि मुख्य रूप पृष्ठभूमि में रहना था ... वह नहीं चाहता था कि बटन क्लिक होने पर उपयोगकर्ता एक और फॉर्म खोलने में सक्षम हो ...;) लेकिन संपादन के लिए thx। .. ओह ... मैं अनुमान लगा रहा था कि मैं गलत पढ़ रहा था। मैं सोच रहा था कि एक बटन क्लिक किया गया था जब दूसरा बटन था ... idk – IAbstract

+0

मैं एक और विकल्प के रूप में .howDialog() जोड़ने जा रहा था लेकिन जॉन के। और जोहान्स ने मुझे मार दिया – IAbstract

1

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

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

public void LoadForm<T>() where T : MyNameSpace.MyBaseForm 
{ 
    // Load all your code in this joint and just call it when you 
    // need a form. In here, you can determine if a copy of the form 
    // already exists and then bring it forward or not 
} 
0

मैं अपने रूपों को संभालने के लिए जेनेरिक्स और आलसी लोड हो रहा है का उपयोग करना पसंद का पालन करने के

SingleForm myform = null; 

void ShowMyForm_Click(object sender, EventArgs e) 
{  if (myform == null) 
     { 
      myform = new SingleForm(); 
     } 
     myform.Show(); 
     myform.BringToFront(); 
} 
संबंधित मुद्दे