İnsanların bu mümkün değil demek niye bilmiyorum:
geçici türlü etkinliğe devre dışı istiyorsunuz diyelim
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;
}|
böyle diyebilirsin:
, böyle bir yöntemi oluşturabilir
var events = textbox1.DisableEvents("GotFocus")
Tekrar eklemek isterseniz, olaylar listesinden geçmeniz yeterlidir.
olası bir kopyası [Yansıtmayı kullanan bir olaydaki temel delegelerin listesini nasıl alabilirim?] (Http://stackoverflow.com/questions/6501288/how-can-i -get-of-the-the-the-the-the-the-yatan-delegeler-olay-kullanarak-yansıma) – Heinzi