Thema EventHandler in C#

Schönen Guten Tag.

Ich habe ein kleines Problem mit dem EventHandler (SelectedIndexChanged) einer ListBox. Ich möchte gern, dass ein Event ausgelöst wird, wenn man ein anderes Element einer ListBox anwählt. Bei einer ListBox erfolgt das auswählen ja über anklicken und dass dabei erfolgende markieren, oder irre ich mich bereits an dieser Stelle.
Der EventHandler scheint auch ausgelöst zu werden, jedoch anstelle der vorerst angestrebten MessageBox flippt folgende ExceptionMessage hoch:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Ich habe den EventHandler sowohl automatisach als auch per Hand hinzugeügt, doch an der Fehlermeldung hat sich nichts geändert.

Ich würde mich freuen, wenn sich jemand mit dem Thema auskennt und mich an seinem Wissen teilhaben lässt.

Mit freundlichen Grüßen

Hallo!
Diese Exception kommt garantiert nicht davon, dass Du einen Eventhandler an eine ListBox hängst.
Wie der Name der Exception sagt, versuchst Du irgendwo auf eine Eigenschaft oder Methode eines Objekt(verweise)s zuzugreifen, wobei aber der Verweis zu diesem Zeitpunkt null ist.
Wenn Du debugst zeigt der Debugger doch genau an, an welcher Stelle die Exception auftritt.
Greifst Du vielleicht auf listBox.SelectedItem zu und das ist zu diesem Zeitpunkt null?

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin Martin.

Ja, ich greife auf eine SelectedItem zu, aber in dem Moment, in dem der EventHandler gestartet wird, habe ich den Wert des SelectedItems geändert und genau dnan sollte er doch nicht mehr null sein. Ich möchte mir halt einfach, um zu schauen, ob alles so funzt wie ich mir das Vorstelle, über eine MessagBox den Index und den Value des ausgewählten Elements anzeigen lassen.

Hier der Quelltext des EventHandlers:
private void LB_DCT_SelectedIndexChanged(object sender, System.EventArgs e)
{
MessageBox.Show(LB_DCT.SelectedValue.ToString(), LB_DCT.SelectedIndex.ToString());
}

Der EventHandler soll auch beim ersten selectieren eines Elements (-1 -> x) geworfen werden, aber egal wann ich ein Element anklicke, bekomme ich diese Exception.

Also wenn du mir einmal mehr helfen könntest, wäre ich dir äusserst verbunden.

Mit freundlichen Grüßen
Stefan.

Hi nochmal!
Der SelectedIndexChanged-EventHandler wird IMMER aufgerufen, wenn sich die Markierung ändert.
Auch das Entfernen der Markierung ist eine Änderung.
Wenn das passiert, ist SelectedValue logischerweise == null.
Nachdem Du im EventHandler eben nicht auf SelectedValue != null überprüfst, fliegt Dein EventHandler auf die Nase, wenn gerade tatsächlich nichts markiert ist.
Ohne es im Detail auswendig sagen zu können, könnte ich mir schon vorstellen, dass beim Markierungswechsel zweimal der SelectedIndexChanged-Event gefeuert wird: Einmal, wenn die alte Markierung entfernt wird und einmal, wenn die neue gesetzt wird.
Schreib’ also einfach in Deinen EventHandler:

if (LB\_DCT.SelectedValue != null)
 System.Diagnostics.Debug.WriteLine("SelectedValue: " + LB\_DCT.SelectedValue + " SelectedIndex: " + LB\_DCT.SelectedIndex);
else
 System.Diagnostics.Debug.WriteLine("SelectedValue == null / SelectedIndex = " + SelectedIndex);

Mit Debug.WriteLine-Ausgaben bist Du vermutlich an dieser Stelle besser bedient als wenn mitten in der Selektionsänderung eine modale Dialogbox aufpoppt… :smile:

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Hubdehoe,

hatte die anderen Meldungen dazu gelesen.

Ich hatte mal ein ähnliches Problem, das dann auf die Reihenfolge zurückzuführen war.

Weist mal dem Textfeld den Eventhandler per „Designer“ wie Visual Studio zu, ist der sehr früh „wach“. Lädt man dann die Daten in das Textfeld reagiert dieser, auch wenn die im Handler benötigten Objekte (noch) nicht instanziiert sind.

Ich habe mir dann so beholfen, dass ich die Handler „von Hand“ angebunden habe, und zwar so spät, das alles notwendige auch erldigt ist.

mfg

Dirk.Pegasus