¿Cómo puedo desactivar un controlador de eventos temporalmente en WinForms?WinForms: desactivar temporalmente un controlador de eventos
Respuesta
Probablemente, la forma más sencilla (que no necesita darse de baja o de otro material) es declarar un valor booleano y comprobar que al comienzo del manipulador:
bool dontRunHandler;
void Handler(object sender, EventArgs e) {
if (dontRunHandler) return;
// handler body...
}
Esto es simple, pero el código será un desastre si usa esto a menudo. – maamaa
Desactivar desde qué perspectiva? Si desea eliminar un método que está en su alcance de la lista de delegados en el manejador, puede simplemente hacer ..
object.Event -= new EventHandlerType(your_Method);
Esto eliminará ese método de la lista de delegados, y se puede recuperarla posteriormente con
object.Event += new EventHandlerType(your_Method);
Creo que te refieres a tu_Método en lugar de a tu_Método(). A partir de C# 2.0, tampoco necesita la parte "new EventHandlerType", simplemente object.Event + = yourMethod; y object.Event - = yourMethod; –
Sí, quise que fuera sans parens;). Sin embargo, no estaba al tanto de la construcción implícita de delegados; Es bueno saberlo. –
Esta idea funciona para mí (en comparación con la respuesta aceptada) en el escenario en el que necesitaba desactivar el controlador temporalmente para un cuadro combinado EditValueChanged. – PhoenixDev
Lo estoy haciendo de esta manera, usando una extensión de control.
public static void SetDatasource(
this ComboBox cb,
object dataSource,
EventHandler _SelectedIndexChanged_eventHandler = null,
EventHandler _SelectedValueChanged_eventHandler = null)
{
//disable events
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged -= _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged -= _SelectedValueChanged_eventHandler;
if (cb.InvokeRequired)
{
cb.BeginInvoke(new _d_SetDatasource_ComboBox(SetDatasource), new object[] { cb, dataSource, _SelectedIndexChanged_eventHandler});
}
else
{
cb.DataSource = dataSource;
//events enabled again
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged += _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged += _SelectedValueChanged_eventHandler;
}
}
private delegate void _d_SetDatasource_ComboBox(ComboBox cb, object dataSource, EventHandler _SelectedIndexChanged_eventHandler = null, EventHandler _SelectedValueChanged_eventHandler = null);
- 1. ¿Cómo desactivar EGit temporalmente?
- 2. Desactivar restricciones temporalmente
- 3. django señales desactivar temporalmente
- 4. ¿Cómo desactivar un complemento en Vim temporalmente?
- 5. Cómo desactivar temporalmente ciertos cronjobs de unix usando un script
- 6. ¿Cómo desactivar Rack-Mini-Profiler temporalmente?
- 7. añadir un controlador de eventos
- 8. Eventos WPF en Winforms
- 9. Propagación de eventos de teclado en winforms
- 10. ¿Cómo puedo desactivar la selección de texto temporalmente usando JavaScript?
- 11. Cómo deshabilitar temporalmente los detectores de eventos en Swing?
- 12. Cómo deshabilitar temporalmente los eventos generados automáticamente en Visual Studio?
- 13. ¿Es posible desactivar temporalmente la interpolación de cadenas de Python?
- 14. C# eliminación de un controlador de eventos
- 15. Desactivar temporalmente la advertencia de gcc en la redefinición
- 16. ¿Hay eventos antes de ejecutar un controlador?
- 17. Cómo quitar un controlador de eventos lambda
- 18. ¿Debo eliminar un controlador de eventos?
- 19. Cómo desenlazar un controlador de eventos específicos
- 20. Delphi: cómo asignar dinámicamente un controlador de eventos sin sobrescribir el controlador de eventos existente?
- 21. desactivar eventos burbujeante C# WPF
- 22. VB.NET 2005 - Controlador de eventos "global"?
- 23. ¿Cómo puedo desactivar temporalmente websocket en Google Chrome?
- 24. Winforms controles de usuario eventos personalizados
- 25. ¿Cómo desactivar temporalmente todos los bloques try catch?
- 26. Suprima el manejo de eventos de jQuery temporalmente
- 27. Controlador de eventos en DataTemplate
- 28. Una forma de enviar eventos almacenados temporalmente a intervalos regulares
- 29. Cancelar onbeforeunload controlador de eventos?
- 30. Cómo deshabilitar temporalmente un detector de mensajes
¿Puede compartir lo que está haciendo en un nivel superior? Debido a que probablemente no desee deshabilitar _ALL_ manejadores de eventos (me vienen a la mente los controladores de pintura y movimiento predeterminados del formulario). –
Simplemente no quiero detectar cambios en el estado de un control cuando lo actualizo mediante programación. Y sí, no quiero deshabilitar _ALL_ manejadores de eventos, solo "un manejador de eventos". http://stackoverflow.com/questions/744436/winforms-two-way-textbox-problem – George