2010-08-19 15 views
50

मेरे पास एक छोटा सा रूप है, जो तब आता है जब मैं Windows Forms एप्लिकेशन में एक बटन दबाता हूं।एस्केप कुंजी दबाते समय फॉर्म को कैसे बंद करें?

मैं भागने की कुंजी दबाकर फ़ॉर्म को बंद करने में सक्षम होना चाहता हूं। मैं ये कैसे करूं? मुझे घटना का उपयोग करने के लिए निश्चित नहीं है (form_closing?)?

+1

वैकल्पिक समाधान के लिए इस धागे पर हंस Passant के जवाब देखें: http://stackoverflow.com/questions/2290959/escape-button-to-close-winform-in-c-sharp – RenniePet

उत्तर

94

यदि आपके पास पहले से फॉर्म बंद करने वाले फॉर्म पर कोई बटन है, तो आप यह फ़ॉर्म करने के लिए फ़ॉर्म पर एक संपत्ति सेट कर सकते हैं।

CancelButton उस बटन के फॉर्म को सेट करें।

हो जाता है या बटन नियंत्रण है जो उपयोगकर्ता द्वारा Esc कुंजी प्रेस क्लिक किया जाता है निर्धारित करता है।

आप एक बटन को रद्द नहीं है, तो फिर आप एक KeyDown हैंडलर जोड़ने और उस में Esc कुंजी के लिए जाँच करने की आवश्यकता होगी:

private void Form_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Escape) 
    { 
     this.Close(); 
    } 
} 

तुम भी KeyPreview गुण सेट करना होगा सच में

फ़ोकस वाले नियंत्रण में ईवेंट पारित होने से पहले फॉर्म को महत्वपूर्ण घटनाएं प्राप्त होंगी या नहीं, यह दर्शाता है कि फ़ॉर्म को महत्वपूर्ण घटनाएं मिलेंगी या नहीं।

लेकिन, जैसा कि Gargo उसकी answer में बताते हैं इसका मतलब यह होगा कि Esc दबाने संवाद में एक नियंत्रण पर एक संपादन निरस्त करने के लिए भी संवाद को बंद करने का असर पड़ेगा। से बचने के लिए कि ProcessDialogKey विधि ओवरराइड इस प्रकार है:

protected override bool ProcessDialogKey(Keys keyData) 
{ 
    if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) 
    { 
     this.Close(); 
     return true; 
    } 
    return base.ProcessDialogKey(keyData); 
} 
+0

यह शर्म की बात है कि बस एक छिपी हुई बटन (दृश्यमान = सत्य) काम नहीं कर रहा है –

+2

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

5

यदि आपके पास अपने फॉर्म पर एक रद्द बटन है, तो आप उस बटन पर फॉर्म। कैंसल बटन संपत्ति सेट कर सकते हैं और फिर भागने को दबाकर प्रभावी ढंग से 'बटन क्लिक करें'।

यदि आपके पास ऐसा कोई बटन नहीं है, तो Form.KeyPreview संपत्ति देखें।

-2
Button cancelBTN = new Button(); 
cancelBTN.Size = new Size(0, 0); 
cancelBTN.TabStop = false; 
this.Controls.Add(cancelBTN); 
this.CancelButton = cancelBTN; 
23

सबसे अच्छा तरीका मैंने पाया "ProcessDialogKey" समारोह ओवरराइड करने के लिए है। इस तरह एक खुले नियंत्रण को रद्द करना अभी भी संभव है क्योंकि फ़ंक्शन केवल तभी कॉल किया जाता है जब कोई अन्य नियंत्रण दबाए गए कुंजी का उपयोग नहीं करता है।

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

protected override bool ProcessDialogKey(Keys keyData) 
{ 
    if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) 
    { 
     this.Close(); 
     return true; 
    } 
    return base.ProcessDialogKey(keyData); 
} 
+2

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

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

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