Delphi-PRAXiS

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/)
-   -   Firemonkey Exchange bei Listbox funktioniert nicht (https://www.delphipraxis.net/179010-firemonkey-exchange-bei-listbox-funktioniert-nicht.html)

Ralphi 8. Feb 2014 13:58

Firemonkey Exchange bei Listbox funktioniert nicht
 
Hallo zusammen,

ich versuche verzweifelt mit TListbox.ItemsExchange (Firemonkey) zwei Elemente einer Listbox zu vertauschen.
Es funktioniert einfach nicht, eine Fehlermeldung kommt nicht.

Hier der Code:

Code:
procedure TForm4.btExchangeClick(Sender: TObject);
begin
lb.BeginUpdate;
lb.ItemsExchange(lb.ListItems[lb.ItemIndex], lb.ListItems[lb.ItemIndex+1]);
lb.EndUpdate;
end;

procedure TForm4.btFillListboxClick(Sender: TObject);
var i :integer;
    item :TListboxItem;
begin
for i:=0 to 10 do
  begin
  item:=TListboxItem.Create(lb);
  item.Text:='Item ' + IntToStr(i);
  lb.AddObject(item);
  end;
end;
lb ist eine Firemonkey-Listbox.
Exchange statt ItemsExchange habe ich auch schon erfolglos versucht.
Hat jemand ItemsExchange schon mal erfolgreich benutzt?
Gibt es einen Trick dazu?
Mache ich was falsch oder ist es ein Fehler in Firemonkey?

Harry Stahl 8. Feb 2014 15:45

AW: Firemonkey Exchange bei Listbox funktioniert nicht
 
Hier darfst Du ausnahmsweise mal nicht "lb.Beginupdate" setzen.

So funktionierts also:

Delphi-Quellcode:
procedure TForm4.btExchangeClick(Sender: TObject);
begin
 //lb.BeginUpdate;
 lb.ItemsExchange(lb.ListItems[lb.ItemIndex], lb.ListItems[lb.ItemIndex+1]);
 //lb.EndUpdate;
end;
Erläuterung: Intern setzt die Funktion "ItemsExchange" selber Listbox.BeginUpdate und Listbox.Endupdate ein. Wenn Du das selber vorher setzt, geht die interne Routine davon aus, dass die Listbox gerade aktualisiert wird und führt die Änderung nicht aus.

Ist leider nirgendwo dokumentiert.

Ralphi 8. Feb 2014 16:30

AW: Firemonkey Exchange bei Listbox funktioniert nicht
 
Hallo,

vielen Dank, das hat mir sehr geholfen.
Funktioniert jetzt wie es soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 Uhr.

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