我想实现的功能是当选中某一item时,点击向上,就使其顺序向上移动一下,直到顶部,点击向下就向下移动,直到底部。请求高手帮助,谢谢!

解决方案 »

  1.   

      if ListBox1.ItemIndex>0 then//向上
      begin
        i:=ListBox1.ItemIndex;
        s:=ListBox1.Items.Strings[i];
        ListBox1.Items.Delete(i);
        ListBox1.Items.Insert(i-1,s);
      end;
    比较笨的方法.向下的也同样的道理就不写了.
      

  2.   

    //向上
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if ListBox1.ItemIndex > 0 then
        ListBox1.Items.Exchange(ListBox1.ItemIndex, ListBox1.ItemIndex - 1);
    end;//向下
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      if ListBox1.ItemIndex < ListBox1.Items.Count - 1 then
        ListBox1.Items.Exchange(ListBox1.ItemIndex, ListBox1.ItemIndex + 1);
    end;
      

  3.   

    如果还想在点了一次向上或向下光标还能跟踪所选择的可以在insert方法后面加上
    ListBox1.Selected[i-1]:=True;
      

  4.   

    我的代码是:
    procedure TSetComForm.Button6Click(Sender: TObject);
    var
      sindex:integer;
      sstring:string;
    begin
    if listbox2.itemindex<> 0 then
    begin
       sstring:=listbox2.Items[listbox2.itemindex];
       sindex:=listbox2.itemindex-1;
       Listbox2.DeleteSelected;
       listbox2.Items.Insert(sindex,sstring);
       listbox2.ItemIndex:=sindex;
    end;
    end;procedure TSetComForm.Button7Click(Sender: TObject);
    var
      sindex:integer;
      sstring:string;
    begin
    if listbox2.itemindex <> listbox2.Items.Count-1 then
    begin
       sstring:=listbox2.Items[listbox2.itemindex];
       sindex:=listbox2.itemindex+1;
       Listbox2.DeleteSelected;
       listbox2.Items.Insert(sindex,sstring);
       listbox2.ItemIndex:=sindex;
    end;
    end;
      

  5.   

    现在的问题就是保存的问题,总不能每一步操作都得保存一下。(我用的是ini文件保存选项)
      

  6.   

    >>移动的问题已经解决了,但是发现一个棘手的问题:
    >>修改过某一个项目之后接着修改另一个项目,这就会造成上次修改的不起作用了,怎么做才能修改过所有项目之后一起保存?
    这个不明白什么意思。