我在这个控件中使用如下句子来改变他的的结点的CHECKED属性,但老是报告错误
说产生EINVALIDCAST异常,消息是INVALID CLASS TAPECAST。意思是类型转换无效!句子是(EnhTreeView1.Items[M] as TEnhTreeNode).Checked :=True;
我用M来遍历EnhTreeView1的所有结点,并将每个结点前的CHECKBOX标记。但出错!哪个朋友使用过这个控件,帮忙看看!谢谢了!http://www.neweasier.com/vcl.html?class=4
上面这个页面的第8个控件就是我说的这个控件!下载地址!

解决方案 »

  1.   

    它的EnhTreeView的
    function CreateNode: TTreeNode; override;
    我觉得应该是Override,如是Virtual的
    Items[M] 就取不到TEnhTreeNode类
    不过这样做了以后
    不会有错误,但有些毛病,那个选择框变成空白
    不知怎回事
      

  2.   

    谢谢!我看他的那个例子,发现如果使用这个控件引用TENHTREENODE的CHECKED属性就不会发生任何错误,比如
    if TEnhTreeNode(EnhTreeView1.Items[M]).Checked then
      Beep;
    这样的句子在编译和运行的时候都不回出错,但我试图写这个属性马上就包错。真是搞不懂,我已经检查了类型转换,没有任何问题,但还是包EINVALIDCAST错误。我看到下载的ZIP包里面有个TXT文件其中有这样的话:
    “One thing with this component that is worth mentioning is that to access
    the Checked property for the nodes, the y must be typecasted to TEnhTreeNode.”真是搞不懂了!我在看看你的意思,XZGYB!
      

  3.   

    老达摩,你说的对,TENHTREEVIEW的NODE属性还是TTREENODE类型,他只是在创建这个结点的时候给他发了一个通知消息让他附带的画一个CHECKBOX,并没有说把TENHTREEVIEW的NODE属性也做成TENHTREENODE类型。
    而且,那里那个VIRTUAL只是方便你以后OVERRIDE的时候可以附带其他操作,所以作者强调一定要进行类型的转换。但如果要转换就存在一个问题,等于是父类的对象向子类方向进行转换,这会导致异常或者一个编译错误!呵呵,真是不清楚作者本人的意图,算了,实在不可以,我换控件了。
    不过这终究是个问题!
      

  4.   

    不谢
    刚看了
    fcTreeView的代码,它是自己画的
    这个控件还是比较不错的