catnode:=treeview1.Items.AddChild(topnode,'');
应该是
catnode:=treeview1.Items.AddChild(topnode,'childnode');
这样showmessage(m)就为‘childnode’
应该是
catnode:=treeview1.Items.AddChild(topnode,'childnode');
这样showmessage(m)就为‘childnode’
..........
//使用指针;
type
PMyRec = ^TMyRec;
TMyRec = record
key: string;
text: string;
end;
...........
var p1,p2:pmyrec;
........
new(p1);
treeview1.SetFocus;
if treeview1.items.count>0 then
topnode:=treeview1.Selected;
treeview1.FullExpand;
p1.text:='ttttttttt'; //要加的字符;
catnode:=treeview1.items.addchildobject(topnode,p1.text,p1);
p2:=catnode.data; //p2指向树的节点;
showmessage(p2.text);//即可显示'ttttttttt';
........
s: string;catnode:=treeview1.Items.AddChild(topnode, s);
动态改变s就行了
catnode不是原值了,请注意!!
catnode:=treeview1.Selected;
m:=catnode.text;
该成
Treeview1.Selected:=CatNode;
....
CatNode.text := m;
ShowMessage(CatNode.Text);
treeview1.fullexpand 不需要,加入接点后会自动展开。
在TTREEVIEW的ONCLICK事件中
写入
form1.treeview1.items.add(treeview1.select,'a string');
treeview1.SetFocus;
topnode:=treeview1.Selected;
treeview1.FullExpand;
catnode:=treeview1.Items.AddChild(topnode,'');
treeview1.Selected:=catnode;
catnode.EditText;
treeview1.Refresh;
catnode.Text:=m;
showmessage(catnode.text);
当我按下button1后,系统显示catnode.text为空, 空节点获得焦点,可以输入节点。但系统默认catnode为空,不知为何?????
var topnode,catnode : ttreenode;
m : string;
begin
m := 'test';
treeview1.SetFocus;
topnode:=treeview1.Selected;
treeview1.FullExpand;
catnode:=treeview1.Items.AddChild(topnode,'');
treeview1.Selected:=catnode;
catnode.EditText;
treeview1.Refresh;
catnode.Text:=m;
treeview1.Refresh;
showmessage(catnode.text);end;
form1.treeview1.items.add(treeview1.select,'a string'); 是不行的。
你那样做也不行,既然m给定了值,showmessage(catnode.text)也就等于m的值,我是动态增加节点!!!!
''用我上面的TForm1.Button1Click试试,点击接点,获得焦点,写入STRING,回车更改成功''
既然十点几事件,电极节点,又会生存点击节点下一个节点,谈何获得焦点点击节点的焦点呢?
点击接点可修改接点的TEXT,
这不矛盾啊。
我就是不知道如何显示写入节点的值,如何存入数据库中?
对于treeview,listview使用指针是最好的办法;
点击节点的时候,获得的焦点还是你所点击的那个,也就是说,treeview1.selected还是你所点的那个节点.
var S: String);
begin
showmessage(s);
end;
这里NODE为被修改的接点,S为修改后的新值。给分吧。
procedure TForm1.TreeView1Click(Sender: TObject);
var ssql:string;
begin
if treeview1.Selected.HasChildren then abort;
p1:=treeview1.selected.data;
begin
ssql:='select * from da_xlda where gxbh='+''''
+p1.key+''''+' and iflag=''0'' order by xlbh';
ado_tree1.Close; //ado_tree 是一个adodataset;
ado_tree1.CommandText:=ssql;
ado_tree1.open;
while not ado_tree1.Eof do
begin
new(p2);
p2.key:=ado_tree1.FieldByName('xlbh').asstring;
p2.text:=ado_tree1.FieldByName('xlmc').asstring;
//下面这条语句是建立子节点,把p2.key;.text存储到树节点的data中去;
t3:=treeview1.items.addchildobject(treeview1.selected,p2.text,p2);
t3.StateIndex:=1;
ado_tree1.next;
end;
end;
end;
前面省略了一些建树语句(在formcreate中)
树的每节点中的data是一个指针 存储了两个数据;(.key;.text);需要的时候将其取出来就可以了;
button1事件如下:
new(p1);
treeview1.SetFocus;
if treeview1.items.count>0 then
topnode:=treeview1.Selected;
treeview1.FullExpand;
catnode:=treeview1.items.addchildobject(topnode,'',p1);
treeview1.Selected:=catnode;
catnode.EditText;
p2:=catnode.data;
treeview1.edited事件如下:
showmessage(p2.text);
系统显示p2.text为空,不知为何?
要显示 .text 就必须先让p2指向 节点的data 然后才可以显示 p2.text;
如果我给p1.text:='123'赋值之后,系统显示showmessage(p2.text)为'123'
new(p1);
p1.text:='123';
treeview1.SetFocus;
if treeview1.items.count>0 then
topnode:=treeview1.Selected;
topnode.Expand(true);
catnode:=treeview1.items.addchildobject(topnode,'',p1);
treeview1.Selected:=catnode;
catnode.EditText;
p2:=catnode.data;
treeview1.edited事件:
showmessage(p2.text);
结果显示'123'.
treeview1.SetFocus;
topnode.Expand(true);
还有
showmessage前面加一ju
p2:=treeview1.selected.data;不过我估计有可能误会你的原意了;
可以肯定,catnode获得了焦点,我一直在想catnode修改之后,系统到底保存了没有?onediting事件是否要写?
那只是在建立节点的时候data里面写了数据
topnode.Expand(true);
这两局不能出掉,我试过,
p2:=treeview1.selected.data
我试过,死机了,我再试一次
我肯定是指针出了问题,我用showmessage(treeview1.Items[1].Text);管用,但是这样麻烦
items.data中是存储你想要存的数据;