Wie verhindert man ListBox.SelectedIndexChanged Ereignis?
Bin ich über ein Listenfeld in meinem C#2.0 windows forms-Anwendung. Die Methode zum Auffüllen des Listenfelds ist
private void PopulateListBox(ListBox lb, ReportColumnList reportColumnList)
{
lb.DataSource = reportColumnList.ReportColumns;
lb.DisplayMember = "ColumnName";
lb.ValueMember = "ColumnName";
}
Jedoch, wenn Sie ausführt, die Methode, es fordert auch das SelectedIndexChanged-Ereignis-handler der listbox, obwohl ich bin nicht die Einstellung der ausgewählte index wird in der Methode oben. Wie kann ich verhindern, dass das SelectedIndexChanged-Ereignis-handler aus aufgerufen wird, für die der obige code?
Möchte ich das Ereignis nur aufgerufen werden, wenn der Benutzer die Auswahl in der ListBox. Oder gibt es irgendeine andere Veranstaltung, die nur für Benutzer die Auswahl listbox-Elemente mit der Maus klicken?
Auf einer anderen Anmerkung, auch wenn der Benutzer klickt auf einen leeren Bereich in der Liste das SelectedIndexChanged-Ereignis gefeuert wird. Also ich Frage mich, wie anders ist es aus die Maus-Klick-Ereignis?
InformationsquelleAutor der Frage Rashmi Pandit | 2009-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie das Listenfeld füllen mit lb.Elemente.AddRange() anstelle von Einstellung der Datenquelle. Zusätzlich zu den nicht-Auslösung SelectedIndexChanged dies auch nicht vor, wählen Sie das erste Element.
InformationsquelleAutor der Antwort Kim Major
Gibt es drei Möglichkeiten, wie Sie Vorgehen können.
A) keinen Haken in das SelectedIndexChanged-Ereignis erst NACH Ihnen genannt habe, diese Methode.
B) eine private boolean in der Klasse, die zunächst auf true gesetzt. Zu Beginn Ihrer PopulateListBoxmethod, ihn auf false setzen, und am Ende stellen Sie wieder auf true. In der Ereignisprozedur für das SelectedIndexChanged , wenn das flag false ist, einfach zurück und tun nichts.
C) In die start von Ihrem PopulateListBoxmethod, trennen Sie von der Veranstaltung (dies.listbox1.SelectedIndexChanged -= myMethod;) und dann rechts, bevor die Methode fertig ist, rehook in diesem Fall.
InformationsquelleAutor der Antwort BFree
Gibt es eine einfache Antwort auf dieses problem:
Ein Code-snippet unten vorschlagen kann, die umgehen.
Dies bedeutet, Stellen Sie einfach die Auswahl-Modus als "None", und fröhlich Daten Binden Sie das Steuerelement. Dann gehen Sie vor und ändern Sie den Modus für die gewünschte Funktion (Hier habe ich es geändert haben, können Sie Mehrere auswählen).
InformationsquelleAutor der Antwort Manish Andankar
Sollten Sie sich bewusst sein, dass selbst wenn Sie nicht behandeln Sie das Ereignis, das erste Element in der Liste noch ausgewählt werden, die automatisch bei der Zuweisung der DataSource-Eigenschaft. Um zu erzwingen, dass der Benutzer eine Auswahl treffen, müssen Sie deaktivieren Sie das automatisch ausgewählte Element.
Wenn Ihr SelectedIndexChanged-Ereignis-handler löst einige der Funktionalität, wenn ein Element ausgewählt ist, können Sie immer noch wollen, zu blockieren, dass diese nicht ausgeführt wird. Ein Weg, dies zu tun, ist zu verfolgen, ob es der code ist momentan füllen der listbox oder nicht. Wenn das SelectedIndexChanged-Ereignis ausgelöst wird, während die listbox wird gefüllt, können Sie vermeiden, die diese Aktionen durchführen:
InformationsquelleAutor der Antwort Fredrik Mörk
Innerhalb der
SelectedIndexChanged
Methode, nur Grube in einer if-Anweisung, die sagt, wennSelectedIndex == -1
nichts anderes tun, tun, was Sie tun möchten, die in dieser Methode wahrscheinlich nicht der effizienteste code aber bei mir funktioniert 🙂InformationsquelleAutor der Antwort steve
Meine situation mag einzigartig sein, aber ich poste es hier nur, falls es jemandem hilft.
Ich Tat, die
Items.AddRange
zum Auffüllen meiner ListBox anstelle der Bindung. Ich weiß nicht warum, aber beim PostBack die SelectedIndex war von -1 bis 0. Dies könnte sein, weil mein Listenfeld warSelectionMode="Single"
.Mein fix war, manuell festlegen der SelectedIndex auf 0 statt -1 nach Bevölkerung:
InformationsquelleAutor der Antwort Homer
Grundsätzlich entfernen der Delegierte der Veranstaltung und fügen Sie dann sobald Sie fertig sind.
InformationsquelleAutor der Antwort Dhananjay