如何把CheckListBox中的打对号的项(即选中的项)删除。不是一个项被选中,是多选。请大家帮忙,我实在搞不定了。

解决方案 »

  1.   

    var i : integer;
    begin
      with CheckListBox1 do
      begin
        for i := Items.Count -1 downto 0 do
        begin
          ItemIndex := i;
          if Checked[i] then begin
            DeleteSelected;
          end;
        end;
      end;
    end;
      

  2.   

    CheckListBox1.Items.Delete(index);
    先判断index
    删除点击的项
      

  3.   

    var
      i:integer;
    begin
      for i:=CheckListBox1.Items.Count-1 downto 0 do
      begin
        if  (CheckListBox1.State[i]=cbChecked) then
           CheckListBox1.Items.Delete(i);
      end;
    end;
      

  4.   

    同意   idilent(说错了别怪我) 
      

  5.   

    请问 idilent(说错了别怪我) 
    CheckListBox1.Items.Delete(i);这个为什么不能用于在循环中删除。还有,为什么用
    for i := Items.Count -1 downto 0 do 而不能用for i := 0 to Items.Count -1  do
      

  6.   

    收回我说的话,楼上的猩猩is right
      

  7.   

    哦,CheckListBox1.Items.Delete(i);可以用于在循环中删除.
    但是为什么downto可以而to不可以呢?
      

  8.   

    downto和to是一样的
    一个从大到小,to反之
    作用is equal
      

  9.   

    microjuz(天才弟弟) 
    你试一下,是不是相等。
      

  10.   

    idilent(说错了别怪我) ( ) 的方法对,你信他吧
      

  11.   

    var
      i:integer;
    begin
      for i:=0 to CheckListBox1.Count-1 do
      begin
        if  (CheckListBox1.Checked[i]) then
           CheckListBox1.Items.Delete(i);
      end;
    end;//为什么这样通不过。
      

  12.   

    whitetiger8(蜗牛[我要一步一步往上爬]) 
    idilent(说错了别怪我) ( ) 的方法确实对,但我想弄明白为什么downto可以而to不可以呢?
      

  13.   

    同意 lion_lh(xmanx)的做法为什么用downto 不用to?
    因为没次删除选择的items后,CheckListBox1.Items.Count就会自动-1,但循环中的CheckListBox1.Items.Count次数不会变,所以到后后面会找不到items.
    很简单一个例子,加入原有5个items,删除一个后,只剩下4个了,所以当你要判断的五个items时会出错。如果用downto就不会有这个问题,因为是到过来反找
      

  14.   

    哦,明白了,first_lover(冷雨夜) 说的不错,结贴了。
      

  15.   

    困扰半个上午的问题解决了,感谢ing