2011-04-26 23 views
52

Estoy tratando de seleccionar el primer elemento en un ListView programáticamente, pero no parece haber sido seleccionado. Estoy utilizando el siguiente código:¿Cómo seleccionar un elemento en un ListView programáticamente?

if (listView1.Items.Count > 0) 
    listView1.Items[0].Selected = true; 

hecho, he tenido este problema antes, pero no puedo recordar cómo me las arreglé para solucionarlo!

Respuesta

68

Lo más probable, es el elemento ser seleccionado, simplemente no se puede decir porque un control diferente tiene el foco. Hay un par de maneras diferentes en que puede resolver esto, dependiendo del diseño de su aplicación.

  1. La solución más sencilla es establecer el foco al primer ListView siempre que se visualice su formulario. El usuario generalmente establece el foco en los controles haciendo clic en ellos. Sin embargo, también puede especificar qué controles obtiene el foco mediante programación. Una forma de hacerlo es establecer el índice de pestañas del control en 0 (el valor más bajo indica el control que tendrá el foco inicial). Una segunda posibilidad es utilizar la siguiente línea de código en el evento de su formulario Load, o inmediatamente después de establecer la Selected propiedad:

    myListView.Select(); 
    

    El problema de esta solución es que el elemento seleccionado ya no aparecerá resaltado cuando el el usuario establece el foco en un control diferente en su formulario (como un cuadro de texto o un botón).

  2. Para solucionar esto, deberá configurar el HideSelection property del control ListView en False. Esto hará que el elemento seleccionado permanezca resaltado, incluso cuando el control pierde el foco.

    Cuando el control tiene el foco, el fondo del elemento seleccionado se pintará con el color de resaltado del sistema. Cuando el control tiene , no tiene el foco, el fondo del elemento seleccionado se pintará en el color del sistema utilizado para el texto en gris (o desactivado).

    Puede establecer esta propiedad, ya sea en tiempo de diseño, o por medio de código:

    myListView.HideSelection = false; 
    
+1

+1, gracias por la gran respuesta. – Homam

21
if (listView1.Items.Count > 0) 
{ 
    listView1.Items[0].Selected = true; 
    listView1.Select(); 
} 

elementos de la lista no aparecen seleccionados a menos que el control tiene el foco (o se establece la propiedad HideSelection a falso)

+3

Los fragmentos de código sin explicaciones no cuentan como respuestas. –

+4

Pero contestó la pregunta y se explica por sí mismo :-) – VikciaR

+7

No, no se explica por sí mismo. La única forma en que tiene sentido es si comprende que los elementos de la lista no aparecen seleccionados a menos que el control tenga el foco (o establezca la propiedad 'HideSelection' en false). Y si lo sabía, no tendría que hacer esta pregunta en primer lugar. Más importante aún, esto se rompe cuando el usuario hace clic en otro lugar en el formulario. ¡De repente, el elemento seleccionado ya no parece estar seleccionado! El investigador que solo copie y pegue el código de tu respuesta no sabrá lo que sucedió, y volverán a hacer otra pregunta. –

7

creo que el problema y la solución se descriptos por gris Cody! Tengo una nota adicional.

Compruebe el enfoque del elemento de la vista de lista especificada (y el control!). Podría establecer el foco y la selección con las siguientes líneas de código:

this.listView1.Items[1].Selected = true; 
this.listView1.Items[1].Focused = true; 

¡Pero el control concentrado era una condición!

+1

Establecer el foco en un elemento de vista de lista individual solo es necesario cuando tiene * múltiples elementos seleccionados. En ese caso, se resaltarán todos los fondos de los elementos seleccionados, pero solo uno de ellos tendrá el "rectángulo de foco" punteado. Puede determinar cuál es configurando la propiedad ['Focused'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.focused.aspx), como lo ha hecho aquí. Cuando solo se selecciona un elemento en 'ListView', siempre tendrá el foco cada vez que su control de host tenga el foco. –

0
if (listView1.Items.Count > 0) 
{ 
    listView1.FocusedItem = listView1.Items[0]; 
    listView1.Items[0].Selected = true; 
    listView1.Select(); 
} 
2
 int i=99;//is what row you want to select and focus 
     listViewRamos.FocusedItem = listViewRamos.Items[0]; 
     listViewRamos.Items[i].Selected = true; 
     listViewRamos.Select(); 
     listViewRamos.EnsureVisible(i);//This is the trick 
+0

De acuerdo, 'EnsureVisible()' es igual de importante. –

-1
ListViewItem.IsSelected = true; 
ListViewItem.Focus(); 
Cuestiones relacionadas