2010-07-16 89 views
64

Tengo un formulario con ComboBox que proporciona una lista desplegable. En el SelectedIndexChanged event de comboBox, estoy ejecutando algún código, pero no quiero que ese código se ejecute cuando se carga el formulario. Lamentablemente, cuando cargo el formulario (antes de hacer una selección en el cuadro combinado), SelectedIndexChanged de los combobox se activa (creo que cuando el cuadro combinado es databinding). ¿Hay alguna manera de evitar tal comportamiento?Detener el evento selectedIndexChanged de comboBox de la activación cuando el formulario carga

+0

No estoy seguro sobre el escritorio, pero en .NET Compact, este evento aparece realmente al fuego antes el evento Form_Load, que es realmente problemático: ni siquiera se ha configurado nada en el formulario cuando se aplica este código. En CF, desafortunadamente, la solución es una variable de forma que se establece al final de Load, y luego el controlador de eventos busca esta variable antes de que se active. – SqlRyan

Respuesta

120

Si desea reaccionar sólo cuando el usuario cambia el elemento seleccionado en el cuadro combinado, entonces es mejor para suscribirse a SelectionChangeCommitted.

+6

¿Pero qué hacer en caso de autocompetar? –

+0

@Arijit Mukherjee derecha. Al escribir un valor en el cuadro de texto en lugar de seleccionar directamente. No desencadenará el evento SelectionChangeCommitted – thoitbk

+0

Maldita sea, he estado buscando en la web durante bastante tiempo para encontrar una solución sencilla como esta. He estado usando el evento SelectionChanged y funcionó en VB.Net - WPF y ahora lo usa en C# - WinForms y no funciona o tal vez soy solo yo. ¡Gracias! – Stephan

10

Simplemente puede desvincular el evento SelectedIndexChanged, llame a su función fill y vuelva a enlazar el evento SelectedIndexChanged. Desafortunadamente, esto no funciona con una grilla.

Por ejemplo:

5

¿Por qué no tener un indicador boolean que indica cuándo ha terminado de cargarse su Form?

En su evento SelectionChanged, compruebe si la marca boolean es true. Si es true, maneje el evento; de lo contrario, ignórelo.

+2

booooooolean .. SelectionChangeCommitted mucho mejor – ppumkin

+2

Ya existe un indicador booleano 'Control.Created' indicándole que el formulario ha terminado de cargarse, lo que también es válido para los formularios. – user1734987

+0

La variación 'ToolStripComboBox' no tiene un evento' SelectionChangeCommitted'. Por lo tanto, este método tendrá que hacer. O bien, para evitar condiciones de carrera, use 'lock' y' Monitor.TryEnter'. – spoulson

5

Asegúrese de establecer la propiedad DataSource en su función después de asignar las propiedades ValueMember y Datamember.

¡Esto lo ayudará a resolver su problema!

+1

Agregue más información que elabore su pensamiento. – Lenin

+0

@Ranjith: ¿puedes dar más detalles? –

1

VB

RemoveHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged 
lbxNomes.DataSource = dst 
Label1.Text = String.Format("Encontrados {0} Sócios nesta pesquisa", dst.Rows.Count) 
Label1.Visible = True 
AddHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged 
-1

Se trabajó para mí de una manera con el siguiente código:

private void ddlChapter_SelectionChangeCommitted(object sender, EventArgs e) 
    { 
     if (ddlChapter.SelectedValue != null) 
     { 
      // Do something here 
     } 
    } 
+0

SelectionChangeCommitted se detendrá para llamar a los elementos de cambio de índice, una vez que todos los elementos cargados en Dropbox, a continuación, puede seleccionar uno por uno solamente, también aumentará la velocidad de carga. –

Cuestiones relacionadas