基本上我想要一个由 StringList 填充的 ListView,当我选择一个 ListItem 并按下 Up 或 Down 时,它会向上或向下移动项目(在两个列表中)。
我正在使用 ListView 的 onKeyDown 来调用 MoverFAT
procedure TF_Aplicador.ListViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ListView.Selected <> nil then
if Key = VK_UP then
MoverFAT(ListView.Selected.Index, -1)
else if Key = VK_DOWN then
MoverFAT(ListView.Selected.Index, 1)
else if Key = VK_DELETE then
DeletarFAT(ListView.Selected.Index);
end;
问题是,向下移动时它总是选择第一个项目(在交换项目之后),向上移动就可以了。FATs 是我的 StringList,而 Atualizar() 只是让 ListView 显示 StringList 的内容。
procedure TF_Aplicador.MoverFAT(I, J: Integer);
begin
if ((I + J) > -1) and ((I + J) < (FATs.Count)) then
begin
FATs.Exchange(I, I+J);
Atualizar;
ListView.Selected := ListView.Items[I+J];
end;
end;