Feuer ListView.SelectedIndexChanged Ereignis Programmatically?
-
03-07-2019 - |
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.
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.