做一个带数据感知功能的TreeView控件,我是从TTreeView继承的,但是想在TTreeNode类中加一个属性可以储存字符串,应该怎样让我自编的TTreeView包含的我想扩展功能的TTreeNode,

解决方案 »

  1.   

    type
      Tmytreeview=class(Ttreeview)
      public    
        property mystr(index:integer,const newelement:string);
      end;
      

  2.   

    我是想在TTreeNode中加入一个属性,不是在TTreeView中加入一个字符串属性
      

  3.   

    这个不难吧?你
    type
       TTreeNodeEx = class(TTreeNode);
    增加一个属性
    你的TreeView控件不要从TTreeView继承
    继承TCustomTreeView,TTreeNode替换为TTreeNodeEx 
    事实上也不一定要必要这么做,
    做数据感知的TreeView控件,你可以考虑使用Node.Data属性,由此和数据源关联,把字符串保存在其中即可(定义一个record)
    或者定义两个类,父节点一个类,子节点一个类,从父节点继承
      

  4.   

    另外我觉得你可以考虑定义一个DataLink
    注册一个属性编辑器也是必要的,用来提供一个字段编辑,
    指定载入哪几个字段到树结构,字段在节点中位置我对控件方面懂得甚少,只是有考虑过也写一个这样的控件
    这方面我也想了解 还请多指教
      

  5.   

    如果只是想在TTreeNode属性里存放东东的话,你可以利用Node的Date属性;
    Type
        PNOdeInfo= ^TNodeInfo;
        TNodeInfo= Record
        S: String;
        I: Integer;
        .....
    var PCurNodeInfo: PNodeInfo
        New(PCurNodeInfo);
        PCurNodeInfo^.s:= ...;
        PCurNodeInfo^.I:= ...;
        CurNode.Data:= PCurNodeInfo;
    这样就把你想存的S,I放入Data属性里了。
        调用的时候用:PCurNodeInfo(CurNode.Data)^.S 就可以了
      

  6.   

    请问如果我从TCustomTreeView,TTreeNode替换为TTreeNodeEx,应该怎样替换,我没有找到替换的地方