मैं यहां सामान्य तरीके से जवाब दे रहा हूं।
मुझे नहीं लगता कि एक सिंगलटन पैटर्न फॉर्म प्रबंधन के साथ अच्छी तरह फिट होगा। आम तौर पर, आप फ़ॉर्म में कुछ संदर्भ पैरामीटर पास करना चाहते हैं, और आप एक ही रूप के कई उदाहरण खोलना चाहेंगे। तो एक सिंगलटन अच्छी तरह से आईएमओ फिट नहीं है।
मुझे लगता है कि फॉर्म प्रबंधन सरल होना चाहिए।
उदाहरण के लिए
, यदि आप किसी अन्य प्रकार से एक मॉडल प्रपत्र प्रदर्शित करना चाहते हैं, मैं वास्तव में कुछ सरल लिखते थे:
private void button1_Click(object sender, EventArgs e)
{
using (ModalForm1 frm = new ModalForm1(myParam))
{
frm.ShowDialog();
if (frm.MyResultProperty == ...)
{
// Do some job here
}
}
}
बेशक आपको कुछ इंटरफ़ेस/जेनरिक वाक्य रचना लिख सकता है में एक छोटे से कोड दोहराव से बचने के मामले आप मोडल रूपों का एक बहुत प्रदर्शित करना चाहते हैं:
public interface IFormResult<T>
{
T Result { get; set; }
}
public class ModalForm1 : Form, IFormResult<string>
{
public ModalForm1()
{
InitializeComponent();
this.Result = "My result";
}
public string Result { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
string res = ShowModalForm<ModalForm1, string>();
}
private static T2 ShowModalForm<T1, T2>()
where T1 : Form, IFormResult<T2>, new()
{
using (T1 form = new T1())
{
form.ShowDialog();
return form.Result;
}
}
लेकिन ईमानदारी से, मुझे लगता है कि यह थोड़ा overingeneered है।
दूसरा बिंदु: यदि आपका फॉर्म बिल्कुल इस विशिष्ट व्यवहार का पालन नहीं करता है (ShowDialog()
तो Result
संपत्ति सेट है), तो आपको एक और इंटरफेस लिखना होगा ... आदि।
यदि इस प्रकार का वाक्यविन्यास (जेनेरिक, इंटरफेस ... आदि) लिखित कोड की रेखाओं की संख्या को कम नहीं करता है या जटिलता या रखरखाव (और स्पष्ट रूप से हम यह नहीं कह सकते कि यह वास्तव में यहां मामला है) , तो यह बहुत बेकार आईएमओ है।
संपादित करें:
फार्म प्रबंधन वास्तव में आपके उपयोग के मामले पर निर्भर करता है।
- आप कहते हैं कि 20 रूपों है कि एक ही समय में प्रदर्शित किया जा सकता है, तो आप एक
FormManager
अवधारणा के बारे में सोच चाहिए (या बेहतर: कैसे संभव खोला रूपों के लिए संख्या को कम करने के द्वारा उपयोगकर्ता अनुभव को बेहतर बनाने के बारे में सोचना)
- आप अपेक्षाकृत सरल कुछ (एक ही समय + 3-4 संभव मोडल रूपों में 2-3 मोडहीन रूपों) है, तो मैं उन रूपों का प्रबंधन करने के जटिल कोड नहीं लिखेंगे।
आम तौर पर, फार्म का है कि आवेदन (अर्थात रूप है कि कार्यक्रम बंद हो जाता है, जब बंद कर दिया जो रूप है कि Application.Run()
की एक पैरामीटर है) शुरू करने के लिए प्रयोग किया जाता है अन्य रूपों की जिम्मेदार है। आपके पास एक मुख्य रूप है, और गुणक बच्चे बनाते हैं। तो अपने मामले वास्तव में अलग है, तो शायद कुछ होशियार लिखने के लिए है, लेकिन यह अपने मामले पर निर्भर करेंगे। मुझे नहीं लगता कि एक रूप प्रबंधन के सामान्य समस्या पैदा करने वाले के लिए एक सामान्य अच्छा जवाब दे सकता है है।
ईमानदारी से, यदि आप वास्तव में कुछ पोषणीय चाहते हैं, को कम करने के रूपों है कि एक ही समय में दिखाया जा सकता है की संख्या की कोशिश (जितना संभव हो उतना)। एक ही समय में एक से अधिक दिखाया गया मोडहीन रूपों ज्यादातर मामलों में एक अच्छा उपयोगकर्ता अनुभव प्रदान नहीं करता है, और प्रपत्र जीवन प्रबंधन समस्याग्रस्त किया जा सकता है अगर रूपों को एक दूसरे पर निर्भर हैं।
आवश्यकताएं क्या हैं एक और रूप बनाने की है? आप स्टार्टअप पर कई रूपों को दिखाना चाहते हैं? एक बार एप्लिकेशन शुरू हो जाने के बाद, फॉर्म शो/छुपा रणनीति क्या है जो आप चाहते हैं (मोडल फॉर्म, एकाधिक रूप, एमडीआई फॉर्म ...)? – ken2k
तो, मुझे स्टार्टअप पर दिखाए गए कई रूपों की आवश्यकता नहीं है। एक बार एप्लिकेशन शुरू हो जाने के बाद, फॉर्म शो/छुपा रणनीति बस कई रूपों (गैर-एमडीआई) है। एक या दो मोडल रूप हो सकते हैं। – Jason