Autor |
Beitrag |
Erivium
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 22.02.10 19:00
Hallo zusammen,
ich habe ein kleines Problem mit der ListBox Komponente und hoffe ihr könnt mir da vielleicht helfen.
Ich möchte einen markierten Eintrag in der ListBox löschen. Mit Delphi 7 beispielsweise funktioniert das bei mir perfekt mit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.ButtonClick(Sender: TObject); var i:integer; begin for i := 0 to ListBox1.Items.Count - 1 do begin if ListBox1.Selected[i]=true then ListBox1.DeleteSelected; end; end; |
Unter Delphi 3 allerdings wird mir die Fehlermeldung "undefinierter Bezeichner 'DeleteSelected'" angezeigt.
Habt ihr da eventl. einen alternativen Lösungsvorschlag auf Lager?
Vielen Dank schonmal.
Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 22.02.2010 um 18:07
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 22.02.10 19:10
Moin!
Erivium hat folgendes geschrieben : | Unter Delphi 3 allerdings wird mir die Fehlermeldung "undefinierter Bezeichner 'DeleteSelected'" angezeigt.
Habt ihr da eventl. einen alternativen Lösungsvorschlag auf Lager? |
Nicht D3 benutzern?
Ansonsten vielleicht so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.ButtonClick(Sender: TObject); var i: Integer; begin for i := ListBox1.Items.Count -1 downto 0 do if ListBox1.Selected[i] then ListBox1.Items.Delete(i); end; | cu
Narses
//EDIT: Code korrigiert: ListBox1 .Items.Delete(i);
_________________ There are 10 types of people - those who understand binary and those who don´t.
Zuletzt bearbeitet von Narses am Di 23.02.10 11:31, insgesamt 1-mal bearbeitet
|
|
Niko S.
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: Mo 22.02.10 19:10
wie wärs mit
Delphi-Quelltext 1:
| Listbox1.delete(ListBox1.ItemIndex); |
//Edit: Mist, zu langsam.
|
|
Erivium 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 22.02.10 19:35
Vielen Dank für die bisherigen Antworten.
Würde ich auch gerne nicht mit Delphi 3 programmieren, aber das Problem ist, dass es leider Voraussetzung ist für die Hausarbeit ist. Nur zum probieren habe ich mal mit D7 herumgespielt.
Habe nun auch mal ListBox1.delete(i) ausprobiert und da gibt es leider nach wie vor dieselbe Fehlermeldung. Gibt es noch andere Varianten wie man auf das ListBox Element zugreifen kann?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 22.02.10 19:43
Kommt dir bei der Schleife keine Fehlermeldung das du auf nichtvorhandene Elemente zugreifst? Denn sobald du ein Element aus der Listbox löscht, greifst du zum schluss auf Elemente zu die nicht vorhanden sind. wäre da eine downTo-Schleife nicht deswegen ratsam?
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 22.02.10 19:45
Narses hat doch im obigen Code eine downto Schleife. 
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 22.02.10 19:46
Narses schon  ich bezog mich bei meiner antwort auf den ersten Post in diesem Topic.
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 22.02.10 20:03
Moin!
Erivium hat folgendes geschrieben : | Habe nun auch mal ListBox1.delete(i) ausprobiert und da gibt es leider nach wie vor dieselbe Fehlermeldung. |
Erivium hat folgendes geschrieben : | Unter Delphi 3 allerdings wird mir die Fehlermeldung "undefinierter Bezeichner 'DeleteSelected'" angezeigt. |
Du verwendest einen anderen Befehl und es wird die gleiche Fehlermeldung angezeigt?  Kann nicht sein.  Was stimmt also nicht?  Deine Beschreibung oder dein Code?
Erivium hat folgendes geschrieben : | Gibt es noch andere Varianten wie man auf das ListBox Element zugreifen kann? |
Hast du denn mal meinen Code ausprobiert?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Erivium 
Hält's aus hier
Beiträge: 14
|
Verfasst: Mo 22.02.10 20:39
Hi,
also mein Code sieht jetzt folgendermaßen aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.MarkierteNotizloeschen1Click(Sender: TObject); var i, j, geloeschtes, letztes:integer; begin for i := LbNotiz.Items.Count -1 downto 0 do begin if LbNotiz.Selected[i] then geloeschtes:=i; letztes:=LbNotiz.Items.Count; end ; LbNotiz.Delete(i); for j:= geloeschtes to letztes do begin Anzahl[j]:=Anzahl[j+1]; letztes:=letztes-1; |
Die andere Schleife soll nur die nachfolgenden Listenelemente dann theoretisch aufrücken lassen.
Delphi meckert hier bei der Zeile LbNotiz.delete[i].
lg
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 22.02.10 22:15
Moin!
Erivium hat folgendes geschrieben : | Delphi meckert hier bei der Zeile LbNotiz.delete[i]. |
Und was genau "meckert" Delphi da?
Erivium hat folgendes geschrieben : | Die andere Schleife soll nur die nachfolgenden Listenelemente dann theoretisch aufrücken lassen. |
Was ist denn Anzahl[]?
Weiterhin schätze ich, du hast da ein begin-end vergessen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Erivium 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.02.10 11:14
Danke für die Antwort.  Ich hoffe jetzt habe ich alle begin-ends. :S
Anzahl ist als Array von der Unit TNotiz abgespeichert. Das gelöschte soll dann mit dem nachfolgenden in der Liste überschrieben werden.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.MarkierteNotizlschen1Click(Sender: TObject); var i, j, geloeschtes, letztes:integer; begin
for i := LbNotiz.Items.Count -1 downto 0 do begin if LbNotiz.Selected[i] then begin geloeschtes:=i; letztes:=LbNotiz.Items.Count; LbNotiz.Delete(i); end; for j:= geloeschtes to letztes do begin Anzahl[j]:=Anzahl[j+1]; letztes:=letztes-1; end;
end; end; |
Die Fehlermeldung bei LbNotiz ist: "Undefinierter Bezeichner: 'Delete'"
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Di 23.02.10 11:28
Versuch mal:
Delphi-Quelltext 1:
| LbNotiz.Items.Delete(i); |
|
|
Erivium 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.02.10 11:45
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 23.02.10 11:53
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Erivium 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.02.10 15:25
Habe alles entsprechend geändert. Vielen Dank für die Hilfe! 
|
|