2011-12-28 11 views
7

मैं निम्नलिखित कोड का उपयोग कर पाठ बॉक्स के लिए कोई हैंडलर द्वारा जोड़ा जा रहा करने के लिए हैंडलर निकालेंजोड़ें/पाठ बॉक्स

private void frmLogin_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown -= new KeyEventHandler(TextBox_KeyDown); 
     } 
    } 
} 

सही तरीका है या क्या कोई बेहतर विकल्प है?

उत्तर

5

यह अच्छा है, लेकिन आप हैंडलर को दूर करने की आवश्यकता नहीं है, और जोड़ने हैंडलर सिर्फ इस डाल:

tb1.KeyDown += TextBox_KeyDown; 

क्योंकि new KeyEventHandler(TextBox_KeyDown); अनावश्यक है।

+0

और मुझे पता है कि कंपाइलर नए कीवेन्ट हैंडलर के साथ एड हैंडलर बनाता है, लेकिन मेरा रिफैक्टरिंग टूल मुझे बताता है कि यह रिडंडेंट प्रतिनिधिमंडल है। – Piyey

2

ईवेंट हैंडलर आपको चाहिए निकालने के लिए बस करो:

tb1.KeyDown -= TextBox_KeyDown; 
4

आपका दृष्टिकोण ठीक है। ईवेंट हैंडलर प्रतिनिधि दोनों को जोड़ने और हटाने में, आप new KeyEventHandler और TextBox_KeyDown के आसपास के आसपास के कोष्ठक को छोड़ सकते हैं। ये संकलक द्वारा निहित हैं (जब तक TextBox_KeyDown विधि अपेक्षित हस्ताक्षर है)। यह पूरी तरह से पाठ्यक्रम की वरीयता का मामला है।

3

हां, यह पूरी तरह से सही है। हालांकि आप शॉर्टंड नोटेशन का उपयोग कर सकते हैं:

tb1.KeyDown -= TextBox_KeyDown; 

हालांकि प्रभाव बिल्कुल वही है।

हालांकि, यह निर्धारित करने के लायक है कि आपको वास्तव में अपने ईवेंट हैंडलर को हटाने की आवश्यकता है या नहीं? आपके फॉर्म और टेक्स्टबॉक्स का जीवन चक्र क्या है? यदि फॉर्म टेक्सबॉक्स का 'मालिक' है, यानी यह लंबे समय तक रहता है, तो आपको इवेंट हैंडलर को हटाने की आवश्यकता नहीं है।

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