老兄:
想想,
你的LISTBOX2在删除后还能不能同LISTBOX1一一对应呢?
所以只能这样:
比较ITEM的内容相同再删除就对了! for i:=0 to (ListForm.ListBox1.Count-1) do
  begin
   if ListBox1.Selected[i] then
   count1:=i;
   for j:=0 to (ListForm.ListBox2.Count-1)  do
begin
   if listbox2.items[j]=listbox1.items[i]
      ListForm.ListBox2.Items.Delete(j);
end
  end;

解决方案 »

  1.   

    该是:
    for i:=0 to (ListForm.ListBox1.Count-1) do
      begin
      if ListBox1.Selected[i] then
    begin
      count1:=i;
      for j:=0 to (ListForm.ListBox2.Count-1)  do
    begin
      if listbox2.items[j]=listbox1.items[i]
          ListForm.ListBox2.Items.Delete(j);
    end;
    end;
      end; 
      

  2.   

    举个例子。你选中了第4、5项,在上面的代码中你首先删除的当然是第4项,然后第5项就会
    成为第4项,那么等下一个循环到第5项的情况就会是该项没有选中(因为全部上移、现在
    的第5项是原来的第6项),你使用DownTo应该就可以解决问题了:
    for i:=(ListForm.ListBox1.Count-1) downto 0 do
    ...
      

  3.   

    问题是希望在listbox2中删掉数据之后,listbox1和listbox2之间是否仍旧要一一对应,如果不需要这样做的的,lxl的意见可以实现你的目的;反之,你就必须把listbox1的对应项也删掉,而且不能使用从小到大的搜索,必须是
    for I := listbox1.items.count -1 downto 0 do
    begin
      if listbox1.selected[i] then
      begin
        listbox1.items.delete(i);
        listbox2.items.delete(i);
      end;
    end;
      

  4.   

    TechnoFantasy(www.applevb.com)的意见也值得考虑,因为当可以多选的时候,就必须使用downto这种方法
      

  5.   

      for i:=0 to (ListForm.ListBox1.Count-1) do
      begin
        if ListBox1.Selected[i] then
            ListForm.ListBox1.Items.Delete(i);
            ListForm.ListBox2.Items.Delete(i);
      end;