如何使用treeview的edittext?(30分)

  • 主题发起人 主题发起人 babytime
  • 开始时间 开始时间
B

babytime

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现如下功能:动态添加treeview的节点,并允许用户同时输入节点名称,若名称有重复
则重新输入,部分代码如下:
procedure TForm1.Button5Click(Sender: TObject);
var
treerootnode,addednode:ttreenode;
begin
treerootnode:=treeview1.TopItem ;
addednode:=treeview1.Items.AddChild(treerootnode,'');
addednode.EditText;
end;
procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
var S: String);
var
i:integer;
rootnode:ttreenode;
newname,sqlstring:string;
begin
newname:=s;
rootnode:=treeview1.Items.Item[0];
for i:=0 to rootnode.Count-1 do begin
if newname=rootnode.Item.Text then
begin
showmessage('节点'+newname+'已存在,请重新输入节点名!');
treeview1.Items[0].Item[node.Index].Selected:=true;
treeview1.endedit(true)
treeview1.Selected.EditText;
exit;
end;
end;
showmessage('新建节点成功!');
treeview1.Items[0].Item[node.Index].Selected:=true;
treeview1.endedit(false);
end;
若新建不成功,调用treeview1.Selected.EditText时会出现此节点被选中,可是text为空的
情况。请教应该怎样写才能实现我想要的功能?
另外我用treeview.endedit(true)和treeview.endedit(false)没有区别,treeview都会纪录
下用户的修改,请问应该怎样用啊??
 
怎么没有人帮忙啊,分数不够可以加~~
 
分数确实太少,我去试试回来给你代码
 
没有人能回答么?
分数可以加的阿~
 
要使节点被选中,可以用 node.selected := true;(treeview1.items[?].selected := true)

treeview的edit事件参数S是指新输入的节点text,
可以判断 if S='' then s := node.text 保留修改前的字符串
 
private
sNoteOldText :string;
procedure WMEditItem(var Message: TMessage); message WM_EditItem;
{ Private declarations }
public
{ Public declarations }
end;
var
form1: Tform1;
const
WM_EditItem = WM_User+100;
procedure tform1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
var S: String);
var
i:Integer;
begin
with TreeView1 do
for i:=0 to Items.Count-1 do
begin
if uppercase(trim(Items.Text))=uppercase(trim(S)) then
begin
ShowMessage('"'+S+'"已经存在');
PostMessage(form1.Handle, WM_EditItem, Integer(Node), 0);
exit;
end
end;
end;

procedure tform1.WMEditItem(var Message: TMessage);
begin
with TTreeNode(Message.WParam) do
begin
Text :=sNoteOldText;
EditText;
end;
end;

procedure Tfomr1.treeview1Change(Sender: TObject; Node: TTreeNode);
begin
sNoteOldText:='';
if node<>nil then
begin
sNoteOldText :=trim(Node.Text);
end;
end;
 
多人接受答案了,谢谢
 
后退
顶部