2011-05-01 19 views
8

Tengo un ListBox con un montón de artículos. El usuario puede hacer clic en un elemento para editar su contenido. ¿Cómo evito que el usuario anule la selección de todos los elementos? es decir, el usuario no debería poder tener nada seleccionado.¿Impedir que el usuario anule la selección de un elemento en un ListBox?

+1

posible duplicado de [ListBox WPF: no permiten deseleccionar/Suprimir] (http://stackoverflow.com/questions/5815844/wpf-listbox-do-not-allow-unselect-deselect) –

Respuesta

4

Hay un caso que falta en su situación, que es cuando la lista se borra se le vuelve a seleccionar un artículo ya no está en la lista. Resuelvo esto agregando un cheque adicional.

 var listbox = ((ListBox)sender); 
     if (listbox.SelectedItem == null) 
     { 
      if (e.RemovedItems.Count > 0) 
      { 
       object itemToReselect = e.RemovedItems[0]; 
       if (listbox.Items.Contains(itemToReselect)) 
       { 
        listbox.SelectedItem = itemToReselect; 
       } 
      } 
     } 

Luego puse este inside a behaviour.

2

No estoy seguro de si existe una forma directa de deshabilitar la anulación de la selección de un elemento, pero una forma transparente para el usuario es realizar un seguimiento del último elemento seleccionado y siempre que se produzca el evento SelectionChanged y el el índice seleccionado es -1, luego vuelva a seleccionar el último valor.

+0

Extraño ... Solo veo un evento 'SelectionChanged'. Sin embargo, definitivamente es un 'ListBox' ... usando WPF y .net 4 ... – mpen

+0

@Mark: Correcto, los enlaces de las publicaciones de amccormack son para winforms (espacio de nombres Windows.Forms). La esencia de la respuesta aún se aplica, sin embargo. –

0

Para deshabilitar una o más opciones en su cuadro de lista/menú desplegable, puede agregar el atributo "deshabilitado" como se muestra a continuación. Esto evita que el usuario seleccione esta opción, y obtiene una superposición gris.

ListItem item = new ListItem(yourvalue, yourkey); 
item.Attributes.Add("disabled","disabled"); 
lb1.Items.Add(item); 
+0

Creo que esto es lo opuesto a lo que quería cuando formulé esta pregunta. Quería evitar que los usuarios * anularan la * opción, no la seleccionen. A menos que quiera decir que podría deshabilitar el último elemento de la lista cuando están en 1 ... pero no estoy seguro si eso me daría el comportamiento deseado o no. – mpen

0

Una solución, según lo sugerido por amccormack:

private void hostsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if(lstHosts.SelectedItem == null) 
     { 
      if(e.RemovedItems.Count > 0) 
      { 
       lstHosts.SelectedItem = e.RemovedItems[0]; 
      } 
1

Esto funciona para segura de prevenir el usuario del Deseleccionar ... Añadir esas 2 Eventos a su CheckedListBox1 y establecer la propiedad CheckOnClick en "True" en Modo de diseño. (MSVS2015)

 private void checkedListBox1_SelectedValueChanged(object sender, EventArgs e) 
     { 
      checkedListBox1.SetItemChecked(checkedListBox1.SelectedIndex, true); 
     } 

     private void checkedListBox1_MouseDoubleClick(object sender, MouseEventArgs e) 
     { 
      checkedListBox1.SetItemChecked(checkedListBox1.SelectedIndex, true); 
     } 
Cuestiones relacionadas