Ich habe ein Formular mit einem ComboBox
, das eine Dropdown-Liste enthält. Auf den ComboBoxen SelectedIndexChanged event
wird Code ausgeführt, aber ich möchte nicht, dass dieser Code ausgeführt wird, wenn das Formular geladen wird. Wenn ich das Formular lade (bevor ich eine Auswahl in der Combobox treffe), wird SelectedIndexChanged
die Combobox leider ausgelöst (ich denke, wenn die Combobox ist databinding
). Gibt es eine Möglichkeit, ein solches Verhalten zu vermeiden?
winforms
data-binding
combobox
StackTrace
quelle
quelle
Antworten:
Wenn Sie nur reagieren möchten, wenn der Benutzer das ausgewählte Element im Kombinationsfeld ändert, ist es besser, SelectionChangeCommitted zu abonnieren .
quelle
Sie können das
SelectedIndexChanged
Ereignis einfach aufheben , Ihrefill
Funktion aufrufen und dasSelectedIndexChanged
Ereignis erneut binden . Leider funktioniert dies nicht mit einem Raster.Zum Beispiel:
this.cmb.SelectionChanged -= new System.EventHandler(this.cmb_SelectionChanged); cmb.fill(); //Your function this.cmb.SelectionChanged += new System.EventHandler(this.cmb_SelectionChanged);
quelle
Stellen Sie sicher, dass Sie die
DataSource
Eigenschaft in Ihreronload()
Funktion festlegen, nachdem Sie die EigenschaftenValueMember
undDatamember
zugewiesen haben.Dies wird Ihnen helfen, Ihr Problem zu lösen!
quelle
Warum nicht eine
boolean
Flagge haben, die anzeigt, wann SieForm
das Laden beendet haben?SelectionChanged
Überprüfen Sie in Ihrem Fall, ob dieboolean
Flagge isttrue
. Wenn diestrue
der Fall ist, behandeln Sie das Ereignis, andernfalls ignorieren Sie es.quelle
ToolStripComboBox
Variation hat keinSelectionChangeCommitted
Ereignis. Diese Methode muss also reichen. Oder Rennbedingungen, deren Nutzung zu verhindernlock
undMonitor.TryEnter
.VB
RemoveHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged lbxNomes.DataSource = dst Label1.Text = String.Format("Encontrados {0} Sócios nesta pesquisa", dst.Rows.Count) Label1.Visible = True AddHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged
quelle
Hier ist eine einfache Lösung, die Ihren Code fast unberührt lässt:
Überprüfen Sie im SelectedIndexChanged-Ereignis, ob das myComboBox-Handle mit der Methode ( IsHandleCreated ) erstellt wurde. Eine weitere zusätzliche Überprüfung besteht darin, zu überprüfen, ob der Benutzer Ihr Combobox-Steuerelement tatsächlich fokussiert, um den ausgewählten Index zu ändern.
private void myComboBox_SelectedIndexChanged(object sender, EventArgs e) { if (myComboBox.IsHandleCreated && myComboBox.Focused) { // Do something here } }
quelle
Es hat bei mir in gewisser Weise mit dem folgenden Code funktioniert:
private void ddlChapter_SelectionChangeCommitted(object sender, EventArgs e) { if (ddlChapter.SelectedValue != null) { // Do something here } }
quelle