主题:求助:Delphi中treeview的使用
ttxiangyou
[专家分:30] 发布于 2007-03-10 19:32:00
我在做一个通用试卷生成系统(Delphi+SQL Server 2000),由于是新手,对treeview控件不是很熟,请高手帮帮忙!
假设Unit1为工程中的一个单元,此单元实现用户向数据库提交试题的功能,Unit1对应窗体中左边为一个treeview组件,代表各章知识点,窗体右边为几个TEdit组件,让用户输入题目及答案,还有一个提交按钮,当用户点提交按钮后,除了将题目提交给数据库外,还要求将用户选择的知识点以一个标识插入数据库以标识该题目,问题是该如何得到该标识,我想是不是可以用各节点的索引表示?还是有其他办法?望高手指点,万分感谢!
我的邮箱:lisazxn@yahoo.com.cn
回复列表 (共6个回复)
沙发
长尾兔 [专家分:3630] 发布于 2007-03-12 07:51:00
这个需要在TreeView树建立时就要做好。给你一种思路:
procedure TForm1.Button1Click(Sender: TObject);//在某节点下新建一个节点
var
T : TTreeNode;
begin
T := TreeView1.Items.AddChild(TreeView1.Selected, 'abcc');
T.Data := Pointer(12); //章节号12
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//单击刚刚新增的节点则ShowMessage节点附加的章节号
showmessage(IntToStr(Integer(TreeView1.Selected.Data)));
end;
板凳
长尾兔 [专家分:3630] 发布于 2007-03-12 08:04:00
重新给你写了一个例子,你用这个试验吧:
procedure TForm1.Button1Click(Sender: TObject);//建立章节树
var
N, NFirst : TTreeNode;
I : integer;
begin
TreeView1.Items.Clear;
NFirst := TreeView1.Items.AddFirst(nil, '全部章节');
for I := 1 to 10 do
begin
N := TreeView1.Items.AddChild(NFirst, '第'+IntToStr(I)+'章');
N.Data := Pointer( I ); //章节号
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//显示用户选中的节点的章节号
showmessage(IntToStr(Integer(TreeView1.Selected.Data)));
end;
实际应用中,还要继续丰富。上面的例子只是给你一种思路。估计网上有这样的第三方控件。
3 楼
ttxiangyou [专家分:30] 发布于 2007-03-12 09:35:00
仔细看了你给的例子,你的意思是不是在程序中动态地创立节点,然后将一个数值付给节点的data域作为标识?但是如果我通过Object Inspector中treeview的Items属性静态的增加各个节点,如图:
根节点
------节点一
------------节点二
该如何得到节点二的标识呢?
4 楼
长尾兔 [专家分:3630] 发布于 2007-03-12 09:40:00
程序中创建节点,与设计阶段创建节点,有什么不同吗?
使用TreeView的一般没有在设计阶段创建节点的。大多数都是在Form的Create阶段创建。无非是写几句代码而已。
如果有多级节点,还要在节点数据库中有一个节点编码字段。
如果你设计阶段创建节点,可以使用选中节点的Text,从数据库中检索对应的章节号。
5 楼
zaliang [专家分:1010] 发布于 2007-03-12 09:41:00
procedure TForm1.Button1Click(Sender: TObject);//建立章节树
var
N, NFirst : TTreeNode;
N1First,N2First:TTreeNode;
I : integer;
begin
TreeView1.Items.Clear;
NFirst := TreeView1.Items.AddFirst(nil, '全部章节');
N1First:=TreeView1.Items.AddChild(NFirst,'some string');
N2First:=TreeView1.Items.AddChild(N1First,'some string');
end
6 楼
hzren007 [专家分:0] 发布于 2007-03-22 14:09:00
好东西
我来回复