2012-05-11 39 views
10

En mi aplicación CheckedListBox, quiero permitir que solo se verifique un solo elemento.CheckedListBox que permite marcar solo un elemento

tengo estas propiedades ya establecido

checkOnClick = true; 
SelectionMode = One; 

Cualquier consejo será apreciado

+4

¿No sería mejor una agrupación de botones de radio? – musefan

+1

Primero [google] (https://www.google.com/search?source=ig&hl=de&rlz=1G1ACAW_DEDE443&q=CheckListBox++only+one+item&oq=CheckListBox++only+one+item&aq=f&aqi=&aql=&gs_l= igoogle.3 ... 67628.71513.0.71707.17.5.1.11.0.0.261.587.3j1j1.5.0 ... 0.0.4BbfKlsCIQk) pulse: http://social.msdn.microsoft.com/Forums/en-US/winforms/ thread/5333cdf2-a669-467c-99ae-1530e91da43a/ –

+0

Parece que CheckedListBox hereda SelectionMode de ListBox, pero ignora esa propiedad. – akatakritos

Respuesta

25

desmarcar todos los demás elementos en caso ItemCheck de la siguiente manera:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { 
     for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix) 
     if (ix != e.Index) checkedListBox1.SetItemChecked(ix, false); 
    } 
+0

Gracias, pensé que debe haber sido una propiedad simple que haría. – Ahmed

+1

aún más simples son los botones de radio, los clientes están acostumbrados a que los botones de radio sean solo una opción y las casillas de verificación sean de opción múltiple, tenga mucho cuidado antes de forzar cambios como este – RhysW

+0

@ Sam1, funcionó. Gracias – Ahmed

6

la mejor manera de hacer esto es de esta manera:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if (e.NewValue == CheckState.Checked && checkedListBox1.CheckedItems.Count > 0) 
    { 
     checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck; 
     checkedListBox1.SetItemChecked(checkedListBox1.CheckedIndices[0], false); 
     checkedListBox1.ItemCheck += checkedListBox1_ItemCheck; 
    } 
} 

sin bucle es siempre mejor.

Cuestiones relacionadas