Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Ein Eintrag aus einer Listbox entfernen (https://www.delphipraxis.net/168591-ein-eintrag-aus-einer-listbox-entfernen.html)

smart 30. Mai 2012 00:40

AW: Ein Eintrag aus einer Listbox entfernen
 
Ja, jetzt klappt es. vielen Dank an euch allen!

Popov 30. Mai 2012 00:41

AW: Ein Eintrag aus einer Listbox entfernen
 
Wenn du einen bestimmten Item löschen willst, dann

Delphi-Quellcode:
var
  i: Integer;
begin
  i := 2; //Beispiel für das dritte Item
  if I > -1 then
     if I < ListBox1.Items.Count then
       ListBox1.Items.Delete(I);
end;
Wenn du einen ausgewählten Item löschen willst

Delphi-Quellcode:
  if ListBox1.ItemIndex > -1 then
    ListBox1.Items.Delete(ListBox1.ItemIndex);
Solltest du mit Multiselect mehrere Items löschen willst, denn

Delphi-Quellcode:
var
  i: Integer;
begin
  for i := ListBox1.Items.Count - 1 downto 0 do
    if ListBox1.Selected[I] then
      ListBox1.Items.Delete(I);
end;
Achte aber dabei IMMER, dass du runterzählst, sonst kommt der maximaler Index Fehler. Grund, wenn der erst und letzte Item gewählt sind und du den ersten Item löscht, ändert sich die Position des letzten Items. Wenn du runterzählst ist es egal.

Delphi-Laie 30. Mai 2012 19:11

AW: Ein Eintrag aus einer Listbox entfernen
 
Zitat:

Zitat von smart (Beitrag 1168654)
Delphi-Quellcode:
if ListBox1.Selected[i] = True then

Boolsche Variablen nicht mit Wahrheitswerten vergleichen: "if ListBox1.Selected[i] then" reicht völlig!

Daniel 30. Mai 2012 19:45

AW: Ein Eintrag aus einer Listbox entfernen
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1168786)
Boolsche Variablen nicht mit Wahrheitswerten vergleichen: "if ListBox1.Selected[i] then" reicht völlig!

Bei Delphi Dank seiner strikten Typisierung ist das halb so schlimm, "TRUE" kann als Konstante angesehen werden, gegen die ich andere boolsche Variablen bedenkenlos und fehlerfrei vergleichen kann. Kritischer wird es bei anderen Programmiersprachen, die i.A. lediglich "FALSE" als konstanten Wert "0" annehmen und jeden beliebigen Wert <> "0" als "TRUE" behandeln.

//edit: Ich möchte dies keinesfalles als schönen Stil propagieren - doch ist es mir wichtig, bei solchen Aussagen wie "mache nie dies oder jenes" wenigstens eine kurze Erläuterung zu liefern.

Furtbichler 31. Mai 2012 07:46

AW: Ein Eintrag aus einer Listbox entfernen
 
Daniel, das Problem sind die Typecasts: Dann ist gibt es neben TRUE und FALSE auch Werte, die zwar wie TRUE aussehen, sich aber merkwürdig verhalten. Das ist aber ein anderes Thema.

Daniel 31. Mai 2012 09:00

AW: Ein Eintrag aus einer Listbox entfernen
 
Ich mache mal ein neues Thema auf. ;-)

//edit: Spannend. Ich sehe gerade, dass sich in Delphi das Verhalten geändert hat. Meine Beispiele von XE2 liefern unter Delphi 2007 andere Ergebnisse. Unter XE2 konnte ich gestern Abend casten wie ich wollte und hatte stets das korrekte Resultat, unter D2007 sieht das schon anders aus.

himitsu 31. Mai 2012 09:34

AW: Ein Eintrag aus einer Listbox entfernen
 
Zitat:

Zitat von Popov (Beitrag 1168671)
Delphi-Quellcode:
var
  i: Integer;
begin
  i := 2; //Beispiel für das dritte Item
  if I > -1 then
     if I < ListBox1.Items.Count then
       ListBox1.Items.Delete(I);
end;

Gerade sowas empfand ich nicht als Lösung.

Da wäre es ohne IF wesentlich benutzerfreundlicher.
Delphi-Quellcode:
var
  i: Integer;
begin
  i := 2; //Beispiel für das dritte Item
  ListBox1.Items.Delete(I);
end;
Denn so oder so, es wird nichts gelöscht, obwohl man was löschen will.
Nur daß dabei einfach nichts passiert ... nichtmal eine Fehlermeldung.


Besser den Fehler beheben (aufpassen, daß i den korrtekten Wert bekommt),
als den Fehler still und heimlich zu verschweigen, wo sich bestenfalls jemand wundert, daß irgendwas fehlt. (falls es überhaupt auffiehl, daß was nicht stimmte).



Das ist ja fast so schlimm wie ein
Delphi-Quellcode:
try
  // wichtige Daten speichern, welche unbedingt gespeichert den müssen
  // oder wichtigen Befehl ausführen, welcher unbedingt ausgeführt werden sollte
  // oder ...
except
end;

// keiner hast was gemerkt

Popov 31. Mai 2012 10:39

AW: Ein Eintrag aus einer Listbox entfernen
 
Zitat:

Zitat von himitsu (Beitrag 1168881)
Denn so oder so, es wird nichts gelöscht, obwohl man was löschen will.
Nur daß dabei einfach nichts passiert ... nichtmal eine Fehlermeldung.

Gut, mag das bei Delete so sein, wusste ich nicht, ist aber Logisch, da man nicht auf das Item als solches zugreift. Trotzdem ist nicht verkehrt vorher abzufragen, auch wenn ich es selbst anders mache. Hier habe ich den Code nur kopiert und ergänzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz