web-dev-qa-db-fra.com

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

J'essaie de sélectionner le premier élément d'un ListView par programme, 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 pas comment j'ai réussi à le résoudre!

57
Homam

Très probablement, l'élément est sélectionné, vous ne pouvez pas le savoir car un contrôle différent 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 en premier lorsque 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 contrôles qui vont cibler le focus par programme. Une façon de procéder consiste à définir l'index de tabulation du contrôle sur 0 (la valeur la plus basse indique le contrôle qui aura le focus initial). Une autre possibilité consiste à 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é n'apparaît plus en surbrillance lorsque l'utilisateur définit le focus sur un contrôle différent de votre formulaire (tel qu'un champ de texte ou un bouton).

  2. Pour résoudre ce problème, vous devez définir la propriété HideSelection du contrôle ListView sur False. Ainsi, l'élément sélectionné restera en surbrillance, même si le contrôle perd la mise au point.

    Lorsque la commande a la focalisation, l'arrière-plan de l'élément sélectionné sera peint avec la couleur de surbrillance du système. Lorsque le contrôle n'est pas activé, l'arrière-plan de l'élément sélectionné est peint dans la couleur système utilisée pour le texte grisé (ou désactivé).

    Vous pouvez définir cette propriété au moment de la conception ou via le code:

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

les éléments de la 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)

27
VikciaR

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

Veuillez vérifier le focus de l'élément de liste spécifié (et du 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! 

7
bitsmuggler
        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
3
Kursat Turkay
ListViewItem.IsSelected = true;
ListViewItem.Focus();
0
user1724225

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 souhaitiez le forcer au contrôle, vous pouvez ajouter la ligne suivante.

listViewRamos.Select();

Pourquoi Microsoft n'a-t-il pas simplement ajouté une méthode SelectItem() qui fait tout cela à votre place, ça me dépasse.

0
Jonathan Wood
if (listView1.Items.Count > 0)
{
    listView1.FocusedItem = listView1.Items[0];
    listView1.Items[0].Selected = true;
    listView1.Select();
}
0
user1119399