Treeview一次要生成的数据太多,我想这样处理,可......(150分)

  • 主题发起人 主题发起人 jobsxy
  • 开始时间 开始时间
J

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
由于这个Treeview生成以后,在各个模块都有使用,于是我在程序的启动界面时生成...

首先定义一个公共单元,然后定义公共变量 MyTree : TTreeview;
执行一个过程体,将MyTree生成....(我的程序无法生成,可也不报错,:()

在应用模块里
TreeView1.Items.Assign(MyTree.Items);

....出错。

请问,我应该如何处理这个问题呢?能否给个简单的实例?
 
implementation
var MyTreeView:TTreeView;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

begin
MyTreeView:=TTreeView.Create(Self);
Form1.InsertControl(MyTreeView);//不知道你是不是少了这句
MyTreeView.Left:=0;
MyTreeView.Top:=0;
MyTreeView.Width:=200;
MyTreeView.Height:=300;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TreeView1.Items:=MyTreeView.Items;//这样赋值
end;
 
谢谢beyondair,不过这样不行,
因为:我需在一个没有FORM的公共单元里创建这个树,
另外,在您的BUTTON2的事件里,Treeview1仅需要MyTreeView取得里面的值,
至于颜色,坐标、大小等由Treeview1自己定义,麻烦再帮忙看看。
 
每个单元本来由4个部分组成
Interface //接口段,好象是这个名字
Implementation //实现段,
Initialization //初始化段,好象是吧?
Finalization //终止化段,
大多单元都有前两个段,而后两个段大多没有,你可以自己加上,具体看帮助
在初始化段,创建那个TTreeView,
在终止化段,释放那个TTreeView
 
To:jobsxy
1。在没有单元里创建是一样的,其它要使用这个树的单元引用这个单元就是了,把你自定
定义的变量放在接口部分的变量声明里。其它单元直接就可以直接用这个变量了。在其它窗
体上显示,或不显示,随你呀。
unit Unit2;
interface
uses comctrls;
var MyTreeView:TTreeView;
implementation
end.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,unit2,
StdCtrls,comctrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
MyTreeView:=TTreeView.Create(Self);
Form1.InsertControl(MyTreeView);//如果不需要显示出来,这句和下面的代码都不用加
MyTreeView.Left:=0;
MyTreeView.Top:=0;
MyTreeView.Width:=200;
MyTreeView.Height:=300;
end;
end.
2。如果你只想用某个节点的某个值,那你就一个节点一个节点的取值吧
Treeview1.Items.Item.Item[j].Text:=MyTreeview.Items.Item.Item[j].Text;
3。以我的理解,你是想用保存一组公共数据,为什么不用结构体来保存,岂不是更方便?
 
你是不是想要生成一个treeView?如果是的话,给我个邮件,我发给你一个我做过的,是用
线程实现的,也可以不用线程实现,但生成一个大的treeview需要较长时间,只要简单改一
下就可以了。
 
唉,我试了很长时间都还是搞不定,也许是我没把问题说得清楚。是这样的:

比如我在一个公用模块定义了变量A,需要在别的模块中进行引用。

麻烦是这个变量A是个Treeview。即

publicunit
---在这个公用模块里,我定义一个Treeview类,并且生成相应的数值,比如说是单位的组织结构

FormA
FormB
FormC
。。。。
---在这些模块里都用到了单位组织结构的树,我现在的做法是每个FORM重新生成一遍树,
但这样做太慢了,于是我考虑生成一次就行了,在这些FORM里只需要引用或考贝即可。
 
照你说的做有什么不可以啊?
 
//在一个公用模块定义了变量A
在 initialization 里面创建:
A := TTreeView.Create(nil); // 记得用 nil 参数
在 finalization 里面释放:
A.Free;

然后,[red]在每个需要用到它的窗口的 OnShow 里面写:
A.Parent := Self;[/red]
就可以了。当然,可能你需要调整位置,那么这样:
A.Visible := False;
A.Parent := Self;
A.Top := 123;
A.Width := 234;
// ...
A.Visible := True;
搞定。
 
if assgined(mytree.items) then
newtv.items := mytree.items;
 
后退
顶部