首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

老有关问题:TreeView携带数据的有关问题

2013-09-06 
老问题:TreeView携带数据的问题本人不是专业编程,问题很菜。TreeView的 Items需要携带几个整数,用Items.Add

老问题:TreeView携带数据的问题
本人不是专业编程,问题很菜。

TreeView的 Items需要携带几个整数,用Items.AddChildObject(Node,Str,Pointer(ID)即使分段也不够,Items又是动态的,携带数组也麻烦,于是把ComCtrls.pas复制到我的目录,修改源码ComCtrls.pas
  TNodeInfo = record
    ImageIndex: Integer;
    SelectedIndex: Integer;
    StateIndex: Integer;
    OverlayIndex: Integer;
    Data: Integer;
    Count: Integer;
    Text: string[255];
    AdditionalProperty1:integer;   //添加几条就能携带几个数据
    ....
  end;+读写事件
  
然后把ComCtrls.pas加入工程编译,这种方法可以吗?
是否需要派生一个新的控件?会不会把原始的ComCtrls.pas的和修改的ComCtrls.pas都编译到执行代码?

编程
[解决办法]
只要一个整数就可以存储一个指针或者对象啊,指针或者对象就可以包含n多个整数了!
比如:
TObj = class
  a,b,c: Integer;//一下就包含了3个整数!
end;
[解决办法]
我只给Ttreenode加过一个datastring:String
新旧版本的确比较麻烦

一个string可以包含几乎任意的record(所有field)了,通过编码的方式(ini或base64)
[解决办法]
结点可以带一个 Data, 把 TStrings 放进去就好了。

function AddData(node:TTreeNode):TStrings;
begin
    Result := TStringList.Create;
    node.Data := Pointer(Result);
end;

function GetData(node:TTreeNode):TStrings;
begin
    if node.Data <> nil then
        Result := TStrings(node.Data);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
    ts : TStrings;
begin
    ts := AddData(TreeView1.Items[0]);
    ts.Add('1');
    ts.Add('2');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    i : Integer;
    ts : TStrings;
begin
    ts := GetData(TreeView1.Items[0]);


    for i:=0 to ts.Count-1 do
    begin
        ShowMessage(ts[i]);
    end;
end;

procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
var
    ts : TStrings;
begin
    ts := GetData((node);
    if ts<>nil then
    begin
        ts.Free;
        node.Data := nil;
    end;
end;

热点排行