2008-10-24 17 views
9

अगर मैं बटन # में चेक कर सकता हूं। क्लिक करें ईवेंट में कोई हैंडलर जुड़े हैं? यदि (बटन। क्लिक करें! = शून्य) संकलन त्रुटि फेंकता है।सी # इवेंट हैंडलर

उत्तर

17

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

अधिक जानकारी के लिए my article about events देखें, या events टैग (जिसे मैं इस प्रश्न में जोड़ना चाहता हूं) देखें।

1

आपको इसकी आवश्यकता क्यों है? संदर्भ क्या है? हो सकता है कि परिणाम
बटन प्राप्त करने का एक बेहतर तरीका है बटन एक बाहरी वस्तु है और आप जो करने का प्रयास कर रहे हैं वह यह है कि यह पूछे बिना ग्राहकों की आंतरिक सूची है। यह encapsulation का उल्लंघन कर रहा है ..
आपको ऑब्जेक्ट को हमेशा प्रकट होने वाली घटनाओं के लिए ग्राहकों को प्रबंधित करना चाहिए। अगर यह ग्राहकों को जागरूक होना चाहता था, तो यह एक विधि हैस्क्लिंट्स पंजीकृत किया गया था। ब्रेक न करें।

0

मुझे लगता है कि यदि आप उस कक्षा में हैं जो घटना को उठाता है तो आप कर सकते हैं।

आप हैंडलर को परिभाषित कर सकते हैं और प्रत्येक का आकलन कर सकते हैं।

उदा। आपके घटना

event System.EventHandler NewEvent; 
उठाने घटना विधि आप भी बन सकते हैं आप कर सकते हैं पर

तब के रूप में परिभाषित किया गया है ...

EventHandler handler = NewEvent; 
    if(handler != null) 
    { 
     handler(this, e); 
    } 

आप हैंडलर दे देंगे कि और कहा कि आप से प्रार्थना किए सूची प्राप्त कर सकते हैं ।

+0

यह जांचने के लिए कि क्या कोई ग्राहक हैं या नहीं, आपको बस "अगर (न्यूवेन्ट! = नल)" की आवश्यकता है - लेकिन यह वास्तव में घटना से नहीं मिल रहा है, यह इसे बैकिंग फ़ील्ड से प्राप्त कर रहा है। मेरा जवाब मानता है कि ओपी अन्य कार्यक्रमों में रुचि रखता है, "बटन। क्लिक करें" उदाहरण दिया गया है। –

0

EventDescriptor e = TypeDescriptor.GetEvents (yourObject)। ढूँढें ("yourEventName", true);

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