Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 |
listBox.Items.RemoveAt(<index>) |
Quellcode |
|
1 |
listBoxEvents_SelectedIndexChanged |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
public partial class Edit : Form { Main main; Daten dataSet; int ind; //Konstruktor public Edit(Daten d, int index, Main incoming) { InitializeComponent(); //Aktuelles Datum einstellen dateTime.Value = DateTime.Today; main = incoming; dataSet = d; ind = index; //Werte setzen textBoxName.Text = d.name; textBoxOrt.Text = d.ort; } //Schließen private void buttonClose_Click(object sender, EventArgs e) { this.Close(); } //Änderungen speichern private void buttonSave_Click(object sender, EventArgs e) { dataSet.name = textBoxName.Text; dataSet.ort = textBoxOrt.Text; //Datum erstellen, ohne Zeit String Datum = dateTime.Value.ToString(); String [] test = Datum.Split(' '); //Datum setzen dataSet.datum = test[0]; MessageBox.Show(dataSet.datum); //Titel setzen dataSet.title = dataSet.datum + " - " + dataSet.name + " - " + dataSet.ort + " (" + dataSet.disziplin + ")"; main.listBoxEvents.Items.RemoveAt(ind); main.listBoxEvents.Items.Add(dataSet); this.Close(); } } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//anderes Event wurde ausgewählt private void listBoxEvents_SelectedIndexChanged(object sender, EventArgs e) { summeEvent = 0; Daten d = (Daten)listBoxEvents.SelectedItem; //Durchmesser anpassen diameter = d.diameter; listBoxShots.Items.Clear(); //Schüsse hinzufügen for (int i = 0; i < d.xValues.Length; i++) { listBoxShots.Items.Add(Convert.ToString(d.rings[i])); } //Summe ermitteln for (int i = 0; i < d.rings.Length; i++) { summeEvent += d.rings[i]; } labelSumme.Text = "Ringe: " + Convert.ToString(summeEvent) + " / " + d.rings.Length * 10 + " (" + Math.Round((double)summeEvent / (d.rings.Length * 10) * 100, 2) + "%)"; visualShots(d.xValues, d.yValues); //Eventoptionen enabled=true; buttonEdit.Enabled = true; buttonDelete.Enabled = true; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Hi,Und wo ist genau das Problem jetzt? Vielleicht solltest Du auch mal den relevanten Code zeigen, der das RemoveAt vornimmt (oder vornehmen soll), damit wir sehen, was Du eigentlich genau vor hast, denn das wird aus dem Kontext irgendwie für mich nicht richtig ersichtlich. Es riecht aber etwas, als ob Du keine Prüfung durchführst, ob das "SelectedItem" eventuell null ist. Denn auch das kann absolut und durchaus vorkommen.
Übrigens finde ich die Benennung Deiner Variablen und Klassen grauenhaft. "Daten" ist so aufschlussreich wie gar kein Name. Und dieses Denglisch ist auch nicht sonderlich förderlich. Im Gegenzug hast Du aber da, wo es wirklich nicht notwendig gewesen wäre, (Code-Smell) Kommentare angebracht.
Quellcode |
|
1 |
listBoxEvents.Items.Remove((Daten)listBoxEvents.SelectedItem); |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Affje« (05.06.2011, 11:07)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Ich klicke in der Liste auf einen Eintrag und entferne ihn mit der Zeile oben (das mit dem OnClick). Wenn ich jetzt das nächste Element löschen möchte, klicke ich wieder darauf und erneut auf den Button usw. Das geht einige Male gut, aber irgendwann kommt die NullReferenceExxception, das versthee ich nicht.Du weißt schon, dass wenn alle Items abgewählt wurden der SelectedIndex auf -1 und das SelectedItem auf null gesetzt wird?
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Auf der Main-Form, also nichts mit ind oder ähnlichem:Tja, da Du wieder nur den halben Code zeigst, kann Dir das keiner sagen. Allerdings finde ich die Idee mit dem "ind" ganz schlecht, da Du "ind" nie änderst, nachdem Du ein Item gelöscht hast. Gibt es diesen Index also nach dem Löschen nicht mehr, wird beim nächsten Mal ein Fehler auftreten.
Wieso Du da nicht vernünftiger Weise "SelectedIndex" nimmst, das ist mir unklar. Übrigens gibt es da ein gutes Tool um sowas zu finden, es heißt Debugger.
Quellcode |
|
1 2 3 4 |
private void buttonDelete_Click(object sender, EventArgs e) { listBoxEvents.Items.RemoveAt(listBoxEvents.SelectedIndex); } |
Quellcode |
|
1 2 3 4 |
private void buttonDelete_Click(object sender, EventArgs e) { listBoxEvents.Items.Remove((Daten)listBoxEvents.SelectedItem); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
private void listBoxEvents_SelectedIndexChanged(object sender, EventArgs e) { summeEvent = 0; Daten d = (Daten)listBoxEvents.SelectedItem; //Durchmesser anpassen diameter = d.diameter; listBoxShots.Items.Clear(); //Schüsse hinzufügen for (int i = 0; i < d.xValues.Length; i++) { listBoxShots.Items.Add(Convert.ToString(d.rings[i])); } //Summe ermitteln for (int i = 0; i < d.rings.Length; i++) { summeEvent += d.rings[i]; } labelSumme.Text = "Ringe: " + Convert.ToString(summeEvent) + " / " + d.rings.Length * 10 + " (" + Math.Round((double)summeEvent / (d.rings.Length * 10) * 100, 2) + "%)"; visualShots(d.xValues, d.yValues); //Eventoptionen enabled=true; buttonEdit.Enabled = true; buttonDelete.Enabled = true; } |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Hallo nochmal.Der SelectedIndex wird auch geändert und die Changed-Methode aufgerufen, wenn Du ein selektiertes Item löschst, nicht nur wenn Du als Anwender ein Element mit der Maus auswählst.
Nutz überall SelectedIndex, ohne ihn irgendwie zwischenzuspeichern. Und prüfe auf -1, bzw. null. Das löst all Deine Sorgen in einem Schlag.
Die Elemente einer Form Y aus einer Klasse X heraus zu ändern ist übrigens auch eine sehr schlechte Idee.
Quellcode |
|
1 2 3 4 5 6 7 |
Daten d = (Daten)listBoxEvents.SelectedItem; if (d != null) { . . . } |
Quellcode |
|
1 2 3 4 5 6 7 |
private void buttonDelete_Click(object sender, EventArgs e) { if (listBoxEvents.SelectedIndex >= 0 && listBoxEvents.SelectedItem != null) { listBoxEvents.Items.RemoveAt(listBoxEvents.SelectedIndex); } } |
Werbeanzeige