2011-02-04 21 views
8

मेरे पास 2 रूप हैं ... जब मैं एप्लिकेशन शुरू करता हूं ... और शीर्षक बार से "एक्स" के करीब उपयोग करता हूं तो पूरा एप्लिकेशन बंद हो जाता है ... अब जब मैं पहले फॉर्म से एक विकल्प चुनता हूं मेरे मामले में यह एक बटन "एडीडी" है क्योंकि यह एक फोनबुक एप्लीकेशन है ... यह दूसरे फॉर्म पर जाता है क्योंकि मैंने 1stform.hide() और 2ndform.show() का उपयोग किया है ... अब जब मैं "एक्स" से करता हूं टाइटल बार यह पूरी तरह से बंद नहीं होता है क्योंकि पहला प्रारूप बंद नहीं होता है .... किसी भी चरण में इसे कैसे प्रोग्राम करना चाहिएसी # फॉर्म को बंद करने के लिए आवेदन

+0

"किसी भी स्तर पर" क्या आपका मतलब किसी भी रूप में है ?? –

+0

हाँ .. किसी भी रूप से ... मेरे मामले में केवल 3 हैं –

उत्तर

11

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

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

लेकिन आपके मामले में त्वरित और गंदे समाधान Application.Exit पर कॉल करना है। यह वर्तमान में खुले रूपों के सभी को बंद कर देगा और तुरंत आपके आवेदन को छोड़ देगा। जैसा कि मैंने उपर्युक्त कहा है, मैं इस दृष्टिकोण की बहुत अधिक अनुशंसा नहीं करता क्योंकि प्रत्येक फॉर्म के FormClosed ईवेंट हैंडलर से Application.Exit पर कॉल करना एक संकेत है कि आपके डिजाइन में कुछ गंभीरता से गलत हो गया है।

यदि एकल स्टार्टअप फॉर्म पैराडाइम आपके लिए काम नहीं करता है, तो आपको अपने हाथों में मामलों को लेने और स्रोत फ़ाइल में Main विधि को अनुकूलित करने के लिए देखना चाहिए। कुछ विचारों के लिए this related question पर दिए गए उत्तरों को देखें कि यह आपके लिए कैसे काम कर सकता है।

+0

+1: अच्छा जवाब! –

+0

CloseEvent क्या है ?? .... क्या मुझे इसे लिखना है ?? –

+0

@ विनोद: मेरा मतलब 'फॉर्मक्लोज्ड' घटना था। दस्तावेज उपलब्ध है [यहां] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosed.aspx), लेकिन यह केवल 'फॉर्म' वर्ग द्वारा खुलासा किया गया एक नियमित कार्यक्रम है । आप अपने आवेदन में किसी अन्य घटना की तरह ही इसकी सदस्यता ले सकते हैं (उदाहरण के लिए, 'बटन। क्लिक करें')। –

5

आप क्या कर सकते हैं फॉर्म का FormClosing ईवेंट का उपयोग करना है, और जोड़ें निम्नलिखित कोड:

Application.Exit(); 

यह पूरे एप्लिकेशन को रोक देगा, और सभी विंडोज़ बंद कर देगा। हालांकि, अगर पृष्ठभूमि धागा चल रहा है, तो प्रक्रिया ही जीवित रहेगी। इस मामले में आप उपयोग कर सकते हैं:

private void Form_ClosingEventhandler()(object sender, CancelEventArgs e) 
{ 
     //Perform any processing if required like saving user settings or cleaning resources 
     Application.Exit(); 
} 

तो बाँध

एक समापन ईवेंट हैंडलर पहले बनाएँ:

Environment.Exit(); 
+0

एक पृष्ठभूमि थ्रेड बाहर निकलने से प्रक्रिया को रोकता नहीं है, क्योंकि यह स्वचालित रूप से बंद हो जाता है।आप शायद एक अग्रभूमि धागे का जिक्र कर रहे हैं। –

+0

@ जोआओ एंजेलो - मेरा मतलब यह है कि यदि कई धागे चल रहे हैं, तो केवल जीयूआई थ्रेड नीचे ले जाया जाएगा, और एप्लिकेशन बंद हो जाएगा, लेकिन प्रक्रिया अभी भी प्रक्रिया सूची में है। इंगित करने के लिए धन्यवाद :) –

2

हर रूपों के समापन घटना

इस तरह पर एक Application.Exit जोड़े यह घटना आपके द्वारा बनाए गए किसी भी रूप में।

//Where you create new form and show it. 
Form1 frm= new Form1(); 
//set other properties 
frm.Closing += new EventHandler(Form_ClosingEventhandler); 
Form2 frm2= new Form2(); 
//set other properties 
frm2.Closing += new EventHandler(Form_ClosingEventhandler); 
+1

मेरे लिए धन्यवाद धन्यवाद! +1 – Vbp

1

निश्चित रूप से आप उपयोगकर्ता को फ़ोन नंबर जोड़ने के बाद पूरे एप्लिकेशन को बंद नहीं करना चाहते हैं? आपको बस यह सुनिश्चित करने की ज़रूरत है कि आपकी मुख्य विंडो फिर से दिखाई दे। इसे लिखें:

private void AddButton_Click(object sender, EventArgs e) { 
     var frm = new AddPhoneNumber(); 
     frm.StartPosition = FormStartPosition.Manual; 
     frm.Location = this.Location; 
     frm.Size = this.Size; // optional 
     frm.FormClosing += delegate { this.Show(); }; 
     frm.Show(); 
     this.Hide(); 
    } 
संबंधित मुद्दे