Also delphineuling, zuerst eine kleine Bitte an dich. Achte drauf wie wo was eingerückt ist. Sowas wie hier:
Delphi-Quelltext
1: 2: 3: 4:
| begin if listbox1.ItemIndex= (0) then showmessage ('Geben Sie bitte Namen ein'); end; |
erschwert nur die Fehlersuche. Bei den drei Zeilen ist das nicht wild. Wenn du aber 20 Zeilen hast und das abschließende end ist eingerückt, dann denkt man zuerst, daß ein end zuwenig ist. Passiert das mitten im Code, dann kommt man richtig durcheinander. Also immer schön aufpassen und am besten nicht nur ein Zeichen einrücken, sondern mindestens zwei.
Jetzt aber zu deinem Problem:
Also, bei ListBoxen sollte man immer zwei Anfragezeilen einbauen. Und ich meine es nicht gelegentlich, sondern IMMER. Regel No 1 bei ListBox: kommt im Code Listbox vor, dann zwei Sicherheitsabfragen einbauen. Am besten immer gleich am anfang des Blocks, dann vergißt man es nicht.
Delphi-Quelltext
1: 2: 3: 4: 5:
| begin if ListBox1.Items.Count = 0 then Exit; if ListBox1.Items.ItemIndex = -1 then Exit;
... |
Die kann man sich nur dann sparen wenn es zum Code gehört irgendwo später auf die Punkte einzugehen.
Count = 0 Abfrage verhindert, daß Zugriffe im Code auf ein Item Wert ins leere gehen und das Programm eine Fehlermeldung ausgibt. Wenn die ListBox leer ist, dann brint es nichts weiter im Code zu gehen. Wo nichts ist, da kann nichts verarbeitet werden. Die zweite Abfrage
ItemIndex = -1 verhindert, daß man z.B. über
with ListBox1 do Items[ItemIndex] versucht einen Wert auszulesen wo nichts gewählt ist.
Also, am besten immer als erstes diese zwei Zeilen einbauen. Sollte später ein leerer Count oder ein nicht gesetzter ItemIndex eine Rolle spielen, dann kann man die Zeile immmer noch entfernen. Aber so erspart man sich böse Überaschungen.
Aber zu deinem Problem. In deinem Fall würde ich es so machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var MyString: String; begin if ListBox1.Items.Count = 0 then begin if InputQuery('Geben Sie bitte Namen ein', 'Eingabeaufforderung', MyString) then begin if Trim(MyString) = '' then Exit else begin ListBox1.Items.Add(MyString); ListBox1.Items.ItemIndex := 0; end; end else begin Exit end; end;
... |
Das kann man noch verfeinern, aber es reicht zumindest.
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >