web-dev-qa-db-fra.com

Obtenir l'index de l'élément sélectionné dans ListView

Cela fait déjà environ une heure que je cherche et je ne trouve pas la meilleure solution . Je suis en train de migrer de VB.NET vers C # Forms et vers C # WPF .. J'utilise ce code pour les formulaires C # et cela fonctionne, mais pas dans C # WPF

 if (ListView1.SelectedItems.Count > 0)
            {
                for (lcount = 0; lcount <= ListView1.Items.Count - 1; lcount++)
                {
                    if (ListView1.Items[lcount].Selected == true)
                    {
                        var2 = lcount;
                        break;
                    }
                }
            }

c’est ainsi que je veux obtenir l’index de l’élément cliqué dans la liste déroulante . J'ai l’erreur dans .SELECTED

s'il vous plaît aider.

8
Glenn

Vous pouvez obtenir SelectedIndex à partir de listView. Pas besoin de parcourir tous les éléments, car selon votre code, vous semblez être intéressé par l'index de tout élément sélectionné.

var2 = ListView1.SelectedIndex;

OR

tout simplement cela fonctionnera si vous êtes intéressé uniquement par le premier index:

if (lst.SelectedItems.Count > 0)
{
    var2 = lst.Items.IndexOf(lst.SelectedItems[0]);
}
15
Rohit Vats

Si vous utilisez le .NET Compact Framework, SelectedIndex n'est pas pris en charge. Pour une solution générale, je préfère SelectedIndices:

ListView.SelectedIndexCollection indices = lst.SelectedIndices;
if (indices.Count > 0)
{
    // Do something with indices[0]
}
3
AlainD

Pour Visual Studio 2015, SelectedIndex ne semble pas être disponible. Au lieu de cela, vous pouvez utiliser SelectedIndices[x]x=0 vous donnera le premier élément sélectionné:

listView.SelectedIndices[0]

Vous pouvez également définir la propriété MultipleSelect sur false pour autoriser la sélection d'un seul élément à la fois.

2

Il peut retourner NULL. De plus, l'événement SelectedIndexChanged peut être FIRED TWICE. Et la première fois, il n'y a encore rien de sélectionné.

Donc, le seul moyen sûr de le trouver est le suivant:

    private void lv1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (lv1.FocusedItem == null) return;
        int p = lv1.FocusedItem.Index;

... maintenant int p a la valeur correcte ...

1
Roger Deep

sColl.Clear (); string item = String.Empty;

        if (listView1.SelectedItems.Count > 0)
        {
            for (int i = 0; i < listView1.SelectedItems.Count; i++)
            {
                if (listView1.SelectedItems[i].Selected)   
                {
                    int i2 = listView1.SelectedItems[i].Index;
                    item = listView1.Items[i2].Text;
                    sColl.Add(item);
                }
            }
        }

        listView1.SelectedItems.Clear();
        foreach (var itemS in sColl)
        {
            string items = itemS;
        }

        sColl.Clear();
        listView1.SelectedItems.Clear();
0
Claudio.Marcandalli

Pourquoi ne ramène pas le SelectedIndex? Ajoutez cette extension après votre espace de noms actuel.

public static class Extension
{
    public static int SelectedIndex(this ListView listView)
    {
        if (listView.SelectedIndices.Count > 0)
            return listView.SelectedIndices[0];
        else
            return 0;
    }
}

Encapsulez cette classe dans un espace de noms appelé Extensions, puis ajoutez-la à l'intérieur de l'espace de noms de vos projets pour utiliser l'extension.

  using Extensions;

Ensuite, utilisez simplement comme ceci

   private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int selectionindex = ListView1.SelectedIndex();
        ListViewItem seletedItem = ListView1.Items[selectionindex];           
    }

P.S . La méthode d'extension aurait dû renvoyer -1 sur Else, mais tant que vous l'utilisez depuis l'événement SelectedIndexChanged, tout va bien, car elle ne sera pas déclenchée s'il n'y a aucun élément. Cela est inhérent à la conception, car l'événement SelectedIndexChanged est déclenché deux fois. Une fois pour désélectionner le premier élément, puis pour en sélectionner un nouveau… .. La méthode correcte consiste à renvoyer -1 et à vérifier le nombre négatif… .. C'est aussi la raison pour laquelle quelqu'un ici a eu l'exception ArgumentOutOfRange.

0
Claudiu Octavian