Mi aplicación C# tiene un comboBox
con un evento SelectedIndexChanged
. Por lo general, quiero que este evento se dispare, pero a veces necesito que el evento no se dispare. Mi comboBox
es una lista de archivos MRU. Si se encuentra que un archivo en la lista no existe, el elemento se elimina del comboBox
y el comboBox
SelectedIndex
se establece en cero. Sin embargo, al establecer comboBox
SelectedIndex
en cero, se desencadena el evento SelectedIndexChanged
, que en este caso es problemático porque hace que se ejecute algún código UIF en el controlador de eventos. ¿Existe alguna forma elegante de deshabilitar/habilitar eventos para los controles de formulario C#? Gracias.Modificación de SelectedIndex de ComboBox sin evento desencadenante en C#
Respuesta
iniciar el método manejador de sucesos con
ComboBox combo = sender as ComboBox;
if (combo.SelectedIndex == 0)
{
return;
}
Si eres problema es con un manejador de sucesos diferentes se podía quitar el registro de eventos de la primera eventhandler.
combo.SelectedIndexChanged -= EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
combo.SelectedIndex = 0;
combo.SelectedIndexChanged += EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
Una forma (bastante feo) sería la de establecer un indicador en el código que elimina la entrada y luego comprobar que en el SelectedIndexChanged
manejador:
if (!deletedEntry)
{
// Do stuff
}
deletedEntry = false;
Una mejor manera podría ser la eliminación de su SelectedIndexChanged
controlador de eventos al comienzo del método de eliminación y reinícielo al final. De esta forma su código no sabrá que el índice ha cambiado.
He encontrado esto muchas veces a lo largo de los años. Mi solución es tener una variable de nivel de clase llamada _noise y si sé que estoy a punto de cambiar el índice de combo o cualquier otro control similar que se active cuando cambie el índice seleccionado, hago lo siguiente en el código.
private bool _noise;
Este es el código del controlador de eventos de control
private void cbTest_SelectedIndexChange(object sender, EventArgs e)
{
if (_noise) return;
// process the events code
...
}
Entonces cuando sé que voy a cambiar el índice, hago lo siguiente:
_noise = true; // cause the handler to ignore the noise...
cbTest.Index = value;
_noise = false; // let the event process again
Me sorprende que no haya una mejor manera de hacerlo, pero esta es la forma en que lo hago. De hecho, utilizo el campo Tag
de la mayoría de los controles, así que no tengo que subclasificar el control. Y uso true
/null
como los valores, ya que null
es el valor predeterminado.
Por supuesto, si usted está utilizando realmente Tag
, tendrá que hacerlo de manera diferente ...
En manejador:
private void control_Event(object sender, EventArgs e)
{
if (control.Tag != null) return;
// process the events code
...
}
En código principal
try
{
control.Tag = true;
// set the control property
control.Value = xxx;
or
control.Index = xxx;
or
control.Checked = xxx;
...
}
finally
{
control.Tag = null;
}
- 1. sensor de luz Android no evento desencadenante
- 2. Evento de rueda de mouse 'ficticio' desencadenante
- 3. Evento desencadenante usando Jquery en cambio CSS?
- 4. InvalidArgument = El valor de '0' no es válido para 'SelectedIndex'. Nombre del parámetro: SelectedIndex
- 5. Evento desencadenante en la carga de imagen de fondo
- 6. Evento de cambio de desencadenante del menú desplegable
- 7. .NET WinForms ComboBox, elementos idénticos y el evento SelectedIndexChanged
- 8. C# Messagebox Con ComboBox
- 9. Evento de cambio de desencadenante <select> usando jquery
- 10. Evento desencadenante en clic principal pero no en elementos secundarios
- 11. Evento desencadenante después de que se complete slideUp o slideDown
- 12. evento desencadenante teclado en un formulario con un campo
- 13. C# ComboBox GotFocus
- 14. La selección de cuadro combinado cambió el evento sin cambiar la selección en el ComboBox
- 15. Cómo establecer el elemento seleccionado de ComboBox en C# Windows Forms?
- 16. JQuery 'Cambio' para RadioButtonList asp.net no evento desencadenante
- 17. El enlace de casilla de verificación en knockout no funciona en el evento de desencadenante
- 18. HTML Dropdown de JavaScript selectedIndex
- 19. mismo código de modificación [C++]
- 20. desencadenante de nivel de fila frente a desencadenante de nivel de instrucción
- 21. Combobox y autocompletar en C#
- 22. Disparar un evento en C# sin métodos de delegado adjuntos?
- 23. Autocompletar ComboBox C#
- 24. Excel VBA: Guardar como activa el evento Cambiar en ComboBox
- 25. ¿Clonación y modificación de eventos de mouse/stylus sin secuestro del cursor en C#?
- 26. Sintaxis de desencadenante en HsqlDB: esperado;
- 27. Evento de desencadenante en la carga del cuerpo completo js/jquery
- 28. Ocultar botón de flecha en ComboBox en C#, VS2008
- 29. ComboBox Autocompletar en SubString
- 30. Asp.NET DropDownList restablece SelectedIndex después de PostBack