2011-04-26 6 views
52

J'essaie de sélectionner le premier élément dans un ListView par programmation, mais il ne semble pas avoir été sélectionné. Je suis en utilisant le code suivant:Comment sélectionner un élément dans un ListView par programmation?

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

En fait, j'ai eu ce problème avant, mais je ne peux pas me rappeler comment j'ai réussi à le résoudre!

Répondre

68

Très probablement, l'élément est être sélectionné, vous ne pouvez pas dire parce qu'un contrôle différent a l'accent. Vous pouvez résoudre ce problème de deux manières différentes, en fonction de la conception de votre application.

  1. La solution simple est de mettre l'accent sur la première ListView chaque fois que votre formulaire est affiché. L'utilisateur définit généralement le focus sur les contrôles en cliquant dessus. Cependant, vous pouvez également spécifier quels contrôles obtiennent le focus par programmation. Pour ce faire, définissez l'index de tabulation du contrôle sur 0 (la valeur la plus basse indique le contrôle qui aura le focus initial). Une deuxième possibilité est d'utiliser la ligne de code suivante dans l'événement Load de votre formulaire, ou immédiatement après avoir défini la propriété Selected:

    myListView.Select(); 
    

    Le problème avec cette solution est que l'élément sélectionné ne sera plus la mise en surbrillance lorsque le l'utilisateur définit un focus sur un contrôle différent sur votre formulaire (comme une zone de texte ou un bouton). Pour résoudre ce problème, vous devez définir la valeur HideSelection property du contrôle ListView sur False. L'élément sélectionné à reste en surbrillance, même lorsque le contrôle perd le focus. Lorsque le contrôle a le focus, l'arrière-plan de l'élément sélectionné sera peint avec la couleur de surbrillance du système. Lorsque le contrôle a et non a le focus, l'arrière-plan de l'élément sélectionné sera peint dans la couleur du système utilisée pour le texte grisé (ou désactivé).

    Vous pouvez définir cette propriété soit au moment de la conception, ou par code:

    myListView.HideSelection = false; 
    
+1

+1, merci pour la bonne réponse. – Homam

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

éléments de liste ne semble pas sélectionnée à moins que le contrôle a le focus (ou vous définissez la propriété HideSelection false)

+3

extraits de code sans explications ne comptent pas comme des réponses. –

+4

Mais il a répondu à la question et il est explicite :-) – VikciaR

+7

Non, ce n'est pas auto-explicatif. La seule façon de le faire est si vous comprenez que les éléments de liste n'apparaissent pas à moins que le contrôle n'ait le focus (ou que vous définissiez la propriété 'HideSelection' sur false). Et si vous le saviez, vous n'auriez pas à poser cette question en premier lieu. Plus important encore, cela se casse lorsque l'utilisateur clique ailleurs sur le formulaire. Soudain, l'élément sélectionné ne semble plus être sélectionné! Le demandeur qui copie et colle simplement le code de votre réponse ne saura pas ce qui s'est passé, et ils reviendront poser une autre question. –

7

Je pense que le problème et en gris cody la solution a été descripted! J'ai une note supplémentaire.

Veuillez vérifier la mise au point de l'élément listview spécifié (et le contrôle!). Je pourrais définir le focus et la sélection avec les lignes de code suivantes:

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

Mais le contrôle ciblé était une condition!

+1

Le réglage de la mise au point sur un élément de listview individuel n'est nécessaire que si vous avez sélectionné * plusieurs * éléments. Dans ce cas, tous les arrière-plans des éléments sélectionnés seront mis en surbrillance, mais un seul d'entre eux aura le "rectangle de focus" en pointillés. Vous pouvez déterminer celui qui est en définissant la propriété ['Focused'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.focused.aspx), comme vous l'avez fait ici. Quand un seul élément de 'ListView' est sélectionné, il aura toujours le focus chaque fois que son contrôle hôte aura le focus. –

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

D'accord, 'EnsureVisible()' est tout aussi important. –

-1
ListViewItem.IsSelected = true; 
ListViewItem.Focus(); 
Questions connexes