怎么用按扭控制LISTBOX的ITEM连续上下移动?(50分)

  • 主题发起人 主题发起人 netpuff
  • 开始时间 开始时间
如果是要使光标上下移动的话给listbox1.ItemIndex赋值就行了
如果是要把整个item移动的话那么向上移
listbox1.Items.Insert(listbox1.ItemIndex-1,listbox1.Items[listbox1.itemindex]);
listbox1.Items.Delete(listbox1.ItemIndex)
向下移
listbox1.Items.Insert(listbox1.ItemIndex+1,listbox1.Items[listbox1.itemindex]);
listbox1.Items.Delete(listbox1.ItemIndex)
不过注意不要越界就好了,限定自己写一下就行。
 
还要编程吗?好像获得焦点后按方向键就可以嘛。
 
你可以将相邻的两个ITEM 的内容交换一下.就可以实现类似移动的效果.
如:
var
Tempstr:string;
currItem:integer;

procedure Tform1.button1click(sender:Tobject);
begin
//判断语句,不要让CurrItem+1越界,类似
currItem:=listbox1.itemindex;
tempstr:=listbox1.items[currItem];
listbox1.items[currItem]:=listbox1.items[curritem+1];
listbox1.items[currItem+1]:=TempStr;
end;
基本思路如此,以上代码供参考.
 

procedure Tfrmqryconfig.btnBottClick(Sender: TObject);
begin
MoveSelectedItems('Bott');
end;

procedure Tfrmqryconfig.btnNextClick(Sender: TObject);
begin
MoveSelectedItems('Next');
end;

procedure Tfrmqryconfig.btnPreClick(Sender: TObject);
begin
MoveSelectedItems('Pre');
end;

procedure Tfrmqryconfig.btnTopClick(Sender: TObject);
begin
MoveSelectedItems('Top');
end;

procedure Tfrmqryconfig.MoveSelectedItems(act: string);
var
i,iMove:integer;
begin
if not (activecontrol is TListBox) then
begin
application.MessageBox('请选择列表框','提示',MB_OK);
exit;
end;

with TListBox(activecontrol) do
begin
if SelCount < 1 then exit;

if (act = 'Next') or (act = 'Bott') then
begin
if Selected[Items.Count-1] then exit;
iMove := 0;
for i := Items.Count - 1 downto 0 do
begin
if Selected then
begin
if act = 'Next' then
begin
if i < Items.Count - 1 then
begin
Items.Move(i,i+1);
Selected[i+1] := true;
end;
end
else
begin
if iMove = 0 then
iMove := Items.Count - 1 - i;
Items.Move(i,i+iMove);
Selected[i+iMove] := true;
end
end;
end; //for
exit;
end; //if (act = 'Next') or (act = 'Bott') then

if Selected[0] then exit;
iMove := 0;
for i:=0 to Items.Count - 1 do
begin
if Selected then
begin
if act = 'Pre' then
begin
if i > 0 then
begin
Items.Move(i,i-1);
Selected[i-1] := true;
end;
end
else if act = 'Top' then
begin
if iMove = 0 then
iMove := i;
Items.Move(i,i-iMove);
Selected[i-iMove] := true;
end;
end; //if Selected then
end; //for
end; //with

end;
 
根据单元的高度在按下上下键时发送鼠标消息。可达到你的效果。
 
多人接受答案了。
 
后退
顶部