visual usar selectionchangecommitted example ejemplos dropdownlist drop down como c# winforms events combobox

c# - usar - selectedindexchanged visual basic



Encienda el comboBox SelectedIndexChanged solo de usuario haga clic (5)

Escribí un método para manejar el evento SelectedIndexChanged de un comboBox.

En el constructor, coloqué el comboBox, y esto activó mi método de manejo de eventos. Que no quiero ya que nadie hizo clic en el comboBox.

¿Hay una manera fácil de hacer que el comboBox no dispare el evento a menos que el usuario haga clic en él?

Si eso no es posible, ¿hay una manera de desconectar el evento al método temporalmente? ¿Podría simplemente configurar "my_combo.SelectedIndexChanged = null" y luego crear un nuevo System.EventHandler?

O supongo que podría crear algún tipo de variable miembro booleana que pueda activar o desactivar y poner una verificación de rama en mi método. Sin embargo, eso parece un chisme.


  1. Solución: si está rellenando el cuadro combinado con valores estáticos solo unos, simplemente rellénelos y after suscríbase al evento desde el código. No utilice WinForms Designer para suscribirse.
  2. Si no es posible durante la carga puede:

    a) defina una variable booleana bool loading , configúrela como true antes de comenzar a rellenar el combo con datos, y en la comprobación del controlador de eventos

    si (cargando) regreso;

    b) Cancelar la suscripción al evento:

    Si la suscripción fuera:

    comboBox.SelectedIndexChanged + = delegate (...);

    La cancelación de la suscripción antes de comenzar a cargar datos es:

    comboBox.SelectedIndexChanged - = delegate (...);

Una vez finalizada la carga de datos, suscribirse de nuevo.


Lo he hecho muchas veces. Solución 1: Eliminar EventHandler del diseñador. Rellena el cuadro combinado y luego establece EventHandler.

Combo1.SelectedIndexChanged += new EventHandler Combo1_SelectedIndexChanged;

Pero funcionará solo si está rellenando el cuadro combinado una vez. Si lo hace por muchas veces, entonces puede estar en un lío.

Solución 2: Es mi preferencia y la uso regularmente. Cambie su evento de cambio de selección como:

private void cb1_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cb = (ComboBox)sender; if(!cb.Focused) { return; } // Here is your Code for selection change }

Así que ahora el evento se activará solo si está enfocado. Espero que estuvieras buscando lo mismo. Espero eso ayude



Puedes usar ambos métodos que propusiste:

  1. usar variable booleana
  2. desasociar método de eventos, rellenar combobox, adjuntar método de eventos como este

    my_combo.SelectedIndexChanged -= my_Combo_SelectedIndexChanged; populateCombo(); my_combo.SelectedIndexChanged += my_Combo_SelectedIndexChanged;

my_Combo_SelectedIndexChanged es el nombre del método que adjuntó al evento.


Yo usaría control.ContainsFocus en lugar de crear otro bool. La advertencia aquí es que debe asegurarse de que el usuario se centre en ese control. Ya sea por llave o ratón.

if(combo.ContainsFocus){ MyEventLogic();}