it-swarm.com.de

Wie kann ich ein Element in einer ListView programmgesteuert auswählen?

Ich versuche, das erste Element in einer ListView programmgesteuert auszuwählen, es scheint jedoch nicht ausgewählt worden zu sein. Ich verwende den folgenden Code:

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

Eigentlich hatte ich dieses Problem schon einmal, aber ich kann mich nicht erinnern, wie ich es gelöst habe!

57
Homam

Am wahrscheinlichsten ist das Element , das Sie nicht auswählen können, da ein anderes Steuerelement den Fokus hat. Es gibt verschiedene Möglichkeiten, wie Sie dies lösen können, abhängig vom Design Ihrer Anwendung.

  1. Die einfache Lösung besteht darin, den Fokus bei jeder Anzeige Ihres Formulars zuerst auf die Variable ListView zu setzen. Normalerweise stellt der Benutzer den Fokus auf die Steuerelemente, indem Sie darauf klicken. Sie können jedoch auch angeben, mit welchen Steuerelementen der Fokus programmgesteuert abgerufen wird. Dazu können Sie den Registerkartenindex des Steuerelements auf 0 setzen (der niedrigste Wert gibt das Steuerelement an, das den anfänglichen Fokus hat). Eine zweite Möglichkeit besteht darin, die folgende Codezeile im Ereignis Load Ihres Formulars oder unmittelbar nach dem Festlegen der Eigenschaft Selected zu verwenden:

    myListView.Select();
    

    Das Problem bei dieser Lösung besteht darin, dass das ausgewählte Element nicht mehr hervorgehoben wird, wenn der Benutzer den Fokus auf ein anderes Steuerelement in Ihrem Formular (z. B. ein Textfeld oder eine Schaltfläche) setzt.

  2. Um dies zu beheben, müssen Sie die HideSelection-Eigenschaft des ListView-Steuerelements auf False setzen. Dadurch wird das ausgewählte Element hervorgehoben, auch wenn das Steuerelement den Fokus verliert.

    Wenn das Steuerelement den Fokus hat, wird der Hintergrund des ausgewählten Elements mit der Farbe des Systems hervorgehoben. Wenn das Steuerelement nicht den Fokus hat, wird der Hintergrund des ausgewählten Elements in der Systemfarbe gezeichnet, die für grau hinterlegten (oder deaktivierten) Text verwendet wird.

    Sie können diese Eigenschaft entweder zur Entwurfszeit oder über den Code festlegen:

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

listenelemente werden nicht ausgewählt angezeigt, es sei denn, das Steuerelement hat den Fokus (oder Sie setzen die HideSelection-Eigenschaft auf false).

27
VikciaR

Ich denke, dass das Problem und die Lösung von Cody Gray beschrieben wurde! Ich habe eine zusätzliche Notiz.

Bitte überprüfen Sie den Fokus des angegebenen Listenansichtselements (und der Kontrolle!). Ich konnte den Fokus und die Auswahl mit den folgenden Codezeilen festlegen:

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

Aber die fokussierte Kontrolle war eine Bedingung! 

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

Ich weiß, dass dies eine alte Frage ist, aber ich denke, dass dies die endgültige Antwort ist.

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

Wenn die Möglichkeit besteht, dass das Steuerelement nicht den Fokus hat, Sie jedoch den Fokus auf das Steuerelement setzen möchten, können Sie die folgende Zeile hinzufügen.

listViewRamos.Select();

Warum Microsoft nicht einfach eine SelectItem()-Methode hinzugefügt hat, die all dies für Sie erledigt, ist mir ein Rätsel.

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