Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Einen Listbox-Eintrag in einen anderen verschieben?
stefanstp - Di 15.10.02 11:48
Titel: Einen Listbox-Eintrag in einen anderen verschieben?
Ich habe zwei Listboxen. Die Listbox1 hat um die 10 Einträge. Die Listbox2 hat noch keine. Jetzt möchte ich, das der selektierte Eintrag von Listbox 1 in Listbox 2 verschoben wird. Wie geht das?
Wer kann helfen?
Besten Dank im Voraus!
STEFAN
Delete - Di 15.10.02 11:55
Du hast den ItemIndex des selektierten Eintrages von Listbox1. Dieser Index erlaubt den Zugriff auf den entsprechenden String:
Quelltext
1:
| ShowMessage(Listbox1.Items[Listbox1.ItemIndex]); |
Diesen String fügst du deiner zweiten Listbox hinzu -wie das geht, sollte ja wohl kein Problem sein? (Stichwort: "Add")- und dann entfernst du den String aus der ersten Listbox einfach (Stichwort:"Listbox1.Items.Delete").
stefanstp - Di 15.10.02 12:03
Titel: Habe es mit Add schon probiert....
aber da bekomme ich immer die Meldung. Listbox2 erreicht Maximum 254 glaube ich....
Hm?
Wäre echt super :D , wenn Du mir mal ein Beispielcode geben könntest....Hinzufügen und löschen habe ich ja schon locker hinbekomme n(siehe Aufgaben bei AllOffice). Aber wenn ich den selektierten Eintrag von Listbox1 in Listbox2 hinzufügen will, kommt die besagte Meldung. Hm????
STEFAN
Delete - Di 15.10.02 12:10
Aus´m Kopf und damit ohne Gewähr:
Quelltext
1: 2: 3:
| with Listbox1 do if(ItemIndex <> -1) then Listbox2.Items.Add(Items[ItemIndex]); |
stefanstp - Di 15.10.02 12:53
Titel: Besten dank...
...werde es mal gleich heute Abend ausprobieren!
STEFAN
Delete - Di 15.10.02 15:31
Oder soll es per Drag and Drop gehen?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then Listbox1.BeginDrag(false); end;
procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if Source is TListbox then Accept := true; end;
procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer); var i : Integer; begin if Source is TListbox And (Listbox1.SelCount > 0) then begin for i := 0 to Listbox1.Items.Count-1 do begin if Listbox1.Selected[i] = true then Listbox2.Items.Add(Listbox1.Items.Strings[i]); end; end; //bei Auswahl [Strg] gedrückt halten und ziehen end; |
Delete - Di 15.10.02 18:44
Eine gute Idee, Luckie. Drag&Drop ... 8) ... immer schick. Das einzige Problem ist, dass dein Code für die Mehrfachauswahl in Listboxen geschrieben ist. (Denn, wenn "MultiSelect" FALSE ist, ist "SelCount" -laut Hilfe- immer -1.) Deswegen schlage ich als Erweiterung spontan (:wink:) mal folgende private Universalfunktionen vor:
Quelltext
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:
| procedure TForm1.LbOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if(Sender is TListBox) then if(Button = mbLeft) then (Sender as TListBox).BeginDrag(false); end;
procedure TForm1.DragAccept(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := (Source is TListBox); end;
procedure TForm1.DragDropFunc(Sender, Source: TObject; X, Y: integer); var i : integer; begin if(Sender is TListBox) then with (Source as TListBox) do case MultiSelect of false: if(ItemIndex <> -1) then if((Sender as TListBox).Items.IndexOf(Items[ItemIndex]) = -1) then (Sender as TListBox).Items.Add(Items[ItemIndex]); true: if(SelCount > 0) then for i := 0 to Items.Count - 1 do if(Selected[i]) and ((Sender as TListBox).Items.IndexOf(Items[i]) = -1) then (Sender as TListBox).Items.Add(Items[i]); end; end; |
Damit lassen sich die Items jetzt problemlos zwischen beiden Listboxen austauschen. Vorausgesetzt sie stehen nicht schon in der Ziel-Listbox. Entweder wählt man diese Funktionen über den Objektinspektor aus, oder man macht es im "OnCreate" des Forms:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.FormCreate(Sender: TObject); begin ListBox1.OnMouseDown := LbOnMouseDown; ListBox1.OnDragOver := DragAccept; ListBox1.OnDragDrop := DragDropFunc;
ListBox2.OnMouseDown := LbOnMouseDown; ListBox2.OnDragOver := DragAccept; ListBox2.OnDragDrop := DragDropFunc; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!