Frage

Wie kann man programmatisch das SelectedIndexChanged-Ereignis eines Listview-Feuer?

Ich habe für den ersten Punkt in meinem Listview soll automatisch ausgewählt werden, nachdem der Benutzer eine bestimmte Aktion abgeschlossen ist. Code existiert bereits innerhalb des SelectedIndexChanged Ereignis das ausgewählte Element zu markieren. Nicht nur, dass nicht das Element hervorgehoben werden, aber ein Breakpoint in SelectedIndexChanged gesetzt wird nie getroffen. Darüber hinaus ist ein Debug.WriteLine versagt Ausgabe zu erzeugen, so dass ich bin ziemlich sicher, dass Ereignis nicht ausgelöst hat.

Der folgende Code nicht das Ereignis ausgelöst:

listView.Items[0].Selected = false;
listView.Items[0].Selected = true;
listView.Select();
Application.DoEvents();

Der zusätzliche .Select () -Methode wurde für eine gute Maßnahme enthalten. ;) Die Abwahl (.Selected = false) war im Preis enthält die ListViewItem in der .Items Sammlung nur für den Fall deaktivieren Sie es standardmäßig ausgewählt worden sein und es auf ‚true‘ keine Auswirkungen haben würde daher zu setzen. Die ‚Application.DoEvents ()‘ Ruf ist noch eine weitere letzte Graben-Methode.

Sollte nicht der obige Code bewirken, dass das SelectedIndexChanged-Ereignis ausgelöst?

Ich sollte erwähnen, dass die SelectedIndexChanged-Ereignis ausgelöst wird richtig auf, wenn ein Element über Tastatur- oder Mauseingabe selcted wird.

War es hilfreich?

Lösung

Abwählen es, indem sie es auf false wird das Ereignis nicht ausgelöst, sondern es zu wahren Willen zu setzen.

    public Form1 ()
    {
        InitializeComponent();
        listView1.Items[0].Selected = false; // Doesn't fire
        listView1.Items[0].Selected = true; // Does fire.
    }

    private void listView1_SelectedIndexChanged (object sender, EventArgs e)
    {
        // code to run
    }

Sie müssen möglicherweise etwas anderes passiert. Welches Ereignis werden Sie Ihre Auswahl Code ausgeführt wird?

Andere Tipps

Warum können Sie nicht den Code bewegen, die in Ihrer Methode Ereignishandler in ein Verfahren ist zur Zeit, die von dem ursprünglichen Ort und auch aus dem Code aufgerufen werden kann?

So etwas wie folgt aus:

class Foo
{
    void bar(Object o, EventArgs e)
    {
        // imagine this is something important
        int x = 2;
    }

    void baz()
    {
        // you want to call bar() here ideally
    }
}

würde dies Refactoring:

class Foo
{
    void bar(Object o, EventArgs e)
    {
        bop();
    }

    void baz()
    {
        bop();
    }

    void bop()
    {
        // imagine this is something important
        int x = 2;
    }
}

Wenn Sie eine Klasse, die von ListView erstellen, können Sie die geschützte Methode aufrufen OnSelectedIndexChanged . Dadurch wird das SelectedIndexChanged Ereignis ausgelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top