Hallo,
Ich habe ein Hauptformular, in dem sich eine
TListBox befindet. Ich möchte darin dann einzelne Einträge nach oben bzw. nach unten verschieben. Gelöst habe ich das Problem mit folgender Methode:
Hier noch falls es erklärt werden sollte:
EditList = TListBox
UpButton / DownButton sind die entsprechenden Button's
(wer hätte das gedacht?
)
Delphi-Quellcode:
// -- nach oben bewegen --
procedure MainForm.UpButtonClick(Sender: TObject);
begin
if MainForm.EditList.ItemIndex > 0 then
MainForm.EditList.Items.Move(MainForm.EditList.ItemIndex, MainForm.EditList.ItemIndex - 1);
MainForm.EditList.SetFocus;
end;
Delphi-Quellcode:
// -- nach unten bewegen --
procedure MainForm.DownButtonClick(Sender: TObject);
begin
try
if (MainForm.EditList.ItemIndex < (MainForm.EditList.Items.Count - 1)) and (MainForm.EditList.Items.Count > 1 ) then
MainForm.EditList.Items.Move(MainForm.EditList.ItemIndex, MainForm.EditList.ItemIndex + 1);
except
end;
S_Alg.EditList.SetFocus;
end;
Das
try ... except ist nur weil ich immer eine
Exception bekam, sobald ich gerade ein Element nach unten bewegt hatte und der Fokus nicht mehr auf einem Eintrag stand. Und genau da liegt mein Problem:
Ich möchte gern, dass bei einem Move der geschobene Eintrag den Fokus erhält (
und selektiert = [blau] unterlegt ist). Den Fokus hat der Eintrag zumindest bei dem MoveUp immer noch. Bei dem MoveDown wandert der Fokus allerdings auch nach oben (anstatt nach unten) und man ist dann zwei Einträge weg von dem eigentlich gewünschten Element. Auch verschwindet die Selektierung einfach (die würde ich halt gerne nachträglich setzen).
Mit
TListItem.Focused kann man ja abfragen ob ein bestimmter Eintrag fokusiert ist. Allerdings müsste ich setzen und nicht abfragen... Geht das? Und wenn ja, wie?
Danke für Eure Hilfe schonmal!