Comment sélectionner un élément dans un ListView par programmation?

J’essaie de sélectionner le premier élément d’un ListView par programmation, mais il ne semble pas avoir été sélectionné. J’utilise le code suivant:

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

En fait j’ai déjà eu ce problème mais je ne me souviens plus comment j’ai réussi à le résoudre!

Très probablement, l’élément est sélectionné, vous ne pouvez simplement pas le savoir car un autre contrôle a le focus. Vous pouvez résoudre ce problème de différentes manières, en fonction de la conception de votre application.

  1. La solution simple consiste à définir le focus sur ListView 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 les commandes qui 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é consiste à utiliser la ligne de code suivante dans l’événement Load 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é n’apparaît plus en surbrillance lorsque l’utilisateur définit le focus sur un contrôle différent de votre formulaire (tel qu’une zone de texte ou un bouton).

  2. Pour résoudre ce problème, vous devez définir la propriété HideSelection ListView contrôle ListView sur False. Cela fera en sorte que l’élément sélectionné rest 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 mise en évidence du système. Lorsque le contrôle n’a pas le focus, l’arrière-plan de l’élément sélectionné sera peint dans la couleur système utilisée pour le texte grisé (ou désactivé).

    Vous pouvez définir cette propriété au moment du design ou par code:

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

les éléments de liste n’apparaissent pas sélectionnés sauf si le contrôle a le focus (ou si vous définissez la propriété HideSelection sur false)

Je pense que le problème et la solution ont été décrits par cody grey! J’ai une note supplémentaire.

S’il vous plaît vérifier le focus de l’élément de liste 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!

  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 sortingck 
 if (listView1.Items.Count > 0) { listView1.FocusedItem = listView1.Items[0]; listView1.Items[0].Selected = true; listView1.Select(); } 

Je sais que c’est une vieille question, mais je pense que c’est la réponse définitive.

 listViewRamos.Items[i].Focused = true; listViewRamos.Items[i].Selected = true; listViewRemos.Items[i].EnsureVisible(); 

S’il y a une chance que le contrôle n’ait pas le focus mais que vous voulez forcer le focus sur le contrôle, vous pouvez alors append la ligne suivante.

 listViewRamos.Select(); 

Pourquoi Microsoft n’a pas simplement ajouté une méthode SelectItem() qui fait tout cela pour vous, cela me dépasse.

 ListViewItem.IsSelected = true; ListViewItem.Focus();