我用了两个treeview,在其中的一个tree的点击事件中调用另一个tree的节点时出错;报告错误时list index out of bounds(n);(n随着点击的不同节点变化)代码如下:node:=tree_index.Items[first].Item[second].Item[third];请各位帮个忙,我刚学,很多都不懂,多谢!!

解决方案 »

  1.   

    就是访问越界,比如tree_index下只有一个节点,你用tree_index.Items[3]就出list index out of bounds(3)的错误.呵呵你的代码中,first,second,third都是什么值? 你确信这些节点都存在吗? 
      

  2.   

    尽量使用GetChild等函数,然后判断是否为nil,这样可以保证不会越界
      

  3.   

    这个是下标溢出报错,Item的本质是TStrings,也就是一个字符串数组。下标从0开始,最大下标是你的个数减去一。看看你访问的是不是合乎规范。如果你使用的下标不在这个范围内就会出现错误。相似的控件,ListBox, ComboBox, ListView等,都是如此。cheers
      

  4.   


    一般应先判断当前节点是否为空
    procedure TForm1.TreeView1Click(Sender: TObject);
    begin
    if TreeView1.Selected = nil then exit;
    .......
    end;
      

  5.   

    不好意思,我确定下标没有越界.item.getchild.getchild这样的函数可以访问的到,但是在item中一加1,2,3这样的变量就不行了!!
    node:=tree_index.Items[first].Item[second].Item[third];这样给一个ttreenode型的变量赋值的格式正确吗,其中first,second,thrid  都是数字变量;
      

  6.   

    如果没有溢出,那就是在你添加的时候一定要初始化。也就是Items.Clear 首先清空一下。可能会有效果。如果还不行,请贴出部分代码。