खोज…


परिचय

यह विषय बताता है कि WinForms इंजन रूपों को प्रदर्शित करने के लिए कैसे काम करता है और आप उनके जीवन काल को कैसे नियंत्रित करते हैं।

एक मॉडल या एक मोडल रूप दिखाएं

WinForms डिज़ाइनर के साथ अपने फ़ॉर्म की संरचना को परिभाषित करने के बाद, आप दो अलग-अलग तरीकों से कोड में अपने फ़ॉर्म प्रदर्शित कर सकते हैं।

  • विधि - एक मॉडल रूप

     Form1 aForm1Instance = new Form1(); 
     aForm1Instance.Show();
    
  • विधि - एक मोडल डायलॉग

     Form2 aForm2Instance = new Form2(); 
     aForm2Instance.ShowDialog();
    

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

एक मॉडल के रूप को बंद करना

एक मॉडल का रूप नियोजित होता है (आमतौर पर) जब आपको अपने एप्लिकेशन मुख्य स्क्रीन के साथ स्थायी रूप से कुछ दिखाने की आवश्यकता होती है (किसी डिवाइस या एमडीआई चाइल्ड विंडो से अतुल्यकालिक रूप से आने वाले डेटा की एक धारा के बारे में सोचें)।
लेकिन जब आप इसे बंद करना चाहते हैं तो एक आदर्श रूप एक अनोखी चुनौती बन जाता है। उदाहरण को कैसे पुनः प्राप्त करें और उस उदाहरण में बंद विधि को कॉल करें?

आप एक वैश्विक वैरिएबल रख सकते हैं जिसका उदाहरण आप बंद करना चाहते हैं।

theGlobalInstance.Close();
theGlobalInstance.Dispose();
theGlobalInstance = null;

लेकिन हम Application.OpenForms संग्रह का उपयोग करने का विकल्प भी चुन सकते हैं, जहां फॉर्म इंजन निर्मित सभी फॉर्म इंस्टेंस को संग्रहीत करता है और फिर भी खुला रहता है।

आप इस संग्रह से उस विशेष उदाहरण को पुनः प्राप्त कर सकते हैं और क्लोज़ विधि को कॉल कर सकते हैं

Form2 toClose = Application.OpenForms.OfType<Form2>().FirstOrDefault();
if(toClose != null)
{
    toClose.Close();
    toClose.Dispose();
}

एक मोडल रूप को बंद करना

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

किसी प्रपत्र को बंद करने के लिए, आपको बस किसी घटना हैंडलर में फ़ॉर्म की DialogResult संपत्ति ( DialogResult.None द्वारा किसी भी मूल्य पर) सेट करने की आवश्यकता है। जब आपका कोड ईवेंट हैंडलर से बाहर निकलता है तो WinForm इंजन फॉर्म को छिपा देगा और प्रारंभिक ShowDialog पद्धति कॉल का अनुसरण करने वाला कोड निष्पादन जारी रखेगा।

private cmdClose_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
}

उपयोगकर्ता को फ़ॉर्म में किस बटन पर क्लिक करना है, यह निर्धारित करने के लिए कॉलिंग कोड ShowDialog से रिटर्न वैल्यू पर कब्जा कर सकता है। जब ShowDialog() का उपयोग करके प्रदर्शित किया जाता है, तो फॉर्म स्वचालित रूप से निपटारा नहीं किया जाता है (चूंकि यह केवल छिपा हुआ था और बंद नहीं था), इसलिए यह सुनिश्चित करने के लिए कि using ब्लॉक using उपयोग करना महत्वपूर्ण है।

नीचे अंतर्निहित OpenFileDialog का उपयोग करने के परिणाम की जांच करने, परिणाम की जांच करने, और इसे निपटाने से पहले संवाद से एक संपत्ति तक पहुंचने का एक उदाहरण है।

using (var form = new OpenFileDialog())
{
    DialogResult result = form.ShowDialog();
    if (result == DialogResult.OK)
    {
        MessageBox.Show("Selected file is: " + form.FileName);
    }
}

आप एक बटन पर DialogResult प्रॉपर्टी भी सेट कर सकते हैं। उस बटन पर क्लिक करने से फॉर्म पर मौजूद बटन से जुड़े मूल्य पर DialogResult संपत्ति सेट हो जाएगी। यह आपको कोड में DialogResult सेट करने के लिए इवेंट हैंडलर को जोड़े बिना फ़ॉर्म को बंद करने की अनुमति देता है।

उदाहरण के लिए, यदि आप अपने फॉर्म में एक OK बटन जोड़ते हैं और उसकी संपत्ति DialogResult.OK सेट कर देते हैं, तो जब आप उस बटन को दबाते हैं तो फ़ॉर्म स्वतः बंद हो जाता है और कॉल कोड ShowDialog() विधि कॉल के बदले में DialogResult.OK प्राप्त करता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow