procedure TfrmUser_product_config.FreeCheckBox;
var
  i : integer;
  ct : TControl;
begin
  for  i:=0 to groupbox1.ControlCount - 1   do
  begin
    if groupbox1.Controls[i] is TCheckBox then
    begin
      (groupbox1.Controls[i] as TCheckBox).Free;
    end;
  end;
end;1.释放控件时会出现越界错误,请问是什么问题?
2.如果换成 downto 时没错误,请问为什么downto可以呢?

解决方案 »

  1.   

    for  i:= groupbox1.ControlCount - 1 downto 0 do
      

  2.   

    to: aiirii 
      我想问为什么要换成downto没错, to 就有错误呢?
      

  3.   

    //當然會越界,如果有3個,釋放了2個,還有一個的話,還存在GroupBox1.Coutrol[2]了嗎?
      

  4.   

    这是一个软件基本常识的问题
    比如:
      i:=0 to 5 你删除了前面5个后,ControlCount又变成了1,最大的下标只能是0了,再找Controls[5]肯定找不到
      

  5.   

    to : l_xiaofeng(這一生隻為你)
     你的意思是我不要减1了
    但是好像不是那样的
    它在中间就会出错
      

  6.   

    wycg_cnh20(发奋图强中)說的也就是這個意思!如果有3個控件,那麼按照你的循環,分別為Control[0],Control[1],Control[2],那麼
    刪除一個Control[0]以後,那麼這個時候剩下的兩個控件就便成了Control[0],Control[1]
    循環到I=1也不會出問題,因為存在,但是如果I=2呢,隻剩下Control[0]了,所以就找不到所謂的groupbox1.Controls[i=2]了組織語言太費勁,轉過來彎沒有?
      

  7.   

    非常感谢 
      aiirii ,wycg_cnh20(发奋图强中),l_xiaofeng(這一生隻為你) 
    的回答我已经理解了