मैं जानता हूँ कि क्यों लोग कहते हैं कि यह संभव नहीं है न:
कहते हैं कि तुम किसी भी घटना अस्थायी अक्षम करना चाहते चलें
static Delegate[] DisableEvents(this Control ctrl, string eventName)
{
PropertyInfo propertyInfo = ctrl.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
EventHandlerList eventHandlerList = propertyInfo.GetValue(ctrl, new object[] { }) as EventHandlerList;
FieldInfo fieldInfo = typeof(Control).GetField("Event"+eventName, BindingFlags.NonPublic | BindingFlags.Static);
object eventKey = fieldInfo.GetValue(ctrl);
var eventHandler = eventHandlerList[eventKey] as Delegate;
Delegate[] invocationList = eventHandler.GetInvocationList();
foreach (EventHandler item in invocationList)
{
ctrl.GetType().GetEvent(eventName).RemoveEventHandler(ctrl, item);
}
return invocationList;
}|
आप इस तरह यह कॉल कर सकते हैं:
, तो आप इस तरह एक विधि बना सकते हैं
var events = textbox1.DisableEvents("GotFocus")
यदि आप उन्हें फिर से जोड़ना चाहते हैं तो आपको केवल ईवेंट सूची में जाना होगा।
स्रोत
2014-10-28 20:56:05
संभावित डुप्लिकेट [मैं प्रतिबिंब का उपयोग करके किसी ईवेंट से अंतर्निहित प्रतिनिधियों की सूची कैसे प्राप्त कर सकता हूं?] (Http://stackoverflow.com/questions/6501288/how-can-i -ज-ए-लिस्ट-ऑफ-द-अंडरलिंग-प्रतिनिधि-से-एक-ईवेंट-उपयोग-प्रतिबिंब) – Heinzi