2011-04-26 18 views
5

शायद सी #, WPF, .NET 4.0 के लिए एक बेवकूफ सवाल के बाद बंद नहीं होता अब और करीब बंद नहीं है।कार्यक्रम नई विंडो

उदाहरण:

 Window d = new Window(); 
     //d.ShowDialog(); 

क्यों है ऐसा?

मैं खिड़की नहीं दिखाना चाहता, मैं बस कुछ उद्देश्य के लिए इस वस्तु का उपयोग करना चाहता हूं। तो मुझे अपने कार्यक्रम को बाद में बंद करने की अनुमति देने के लिए क्या करना है?

उत्तर

7

यह बहुत संभव है कि आप अपने आवेदन को बंद करने के केवल जब इसकी खिड़कियों के सभी बंद कर दिए गए कॉन्फ़िगर कर दिया है है बंद करने के लिए, और एक नई विंडो बनाने के द्वारा इस कोड का उपयोग कर सकते हैं जो कभी बंद नहीं होता है, आपका आवेदन कभी भी बंद नहीं होता है।

यह सेटिंग Application.ShutdownMode property द्वारा शासित है, जो उस स्थिति को निर्दिष्ट करती है जो Shutdown method को कॉल करने का कारण बनती है। अनिवार्य रूप से, आपके पास तीन विकल्प हैं।

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

    यह विकल्प Application.ShutdownMode संपत्ति को OnLastWindowClose पर सेट करके निर्दिष्ट किया गया है।

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

    यह विकल्प Application.ShutdownMode संपत्ति को OnMainWindowClose पर सेट करके निर्दिष्ट किया गया है।

  3. तीसरा विकल्प अनिवार्य रूप से इंगित करता है कि आप मैन्युअल रूप से चीजों का प्रबंधन करने जा रहे हैं। जब तक आप कोड के माध्यम से Shutdown method को कॉल नहीं करते हैं, तब तक यह एप्लिकेशन को बंद नहीं करेगा।

    यह विकल्प Application.ShutdownMode संपत्ति को OnExplicitShutdown पर सेट करके निर्दिष्ट किया गया है।

मेरे सिफारिश, इस मामले में, यह है कि आप दूसरा विकल्प सेट, और जब भी उपयोगकर्ता मुख्य विंडो बंद कर देता है आपके एप्लिकेशन स्वचालित रूप से पास है। यह किसी भी भटकने वाली बाल खिड़कियों को रोक देगा जो अभी भी आपके ऐप को बंद होने से रोकने से दिखाया जा सकता है। यह Stecya's answer में दिखाए गए कोड को लिखने की आवश्यकता को समाप्त करता है, और रनटाइम को आपके लिए यह सब स्वचालित रूप से संभालता है।

3

आप सभी खिड़कियां

private void CloseAllWindows() 
    { 
    foreach(var window in Application.Current.Windows) 
     window.Close(); 
    } 
+1

+1, अच्छा है। // 'toList() 'के लिए कोई ज़रूरत नहीं है। – Homam

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