多谢师父指点,偶又攻克一个问题,但还有一个写法,偶掌握不住:超级用户 treeview: 超级用户 薪用户1 name passwd 薪用户2 …… 普通用户 新用户1 name passwd 薪用户2 ……“新用户1、name、passwd”这三个节点的位置,应该怎么表示呢?
Search一下啊。最好每个TreeNode的Data属性要充分利用上,可以存放唯一标识该节点的值以及其它辅助的值。function SearchTreeNode(AItem: string;): TTreeNode; var i: Integer; ATreeNode: TTreeNode; begin Result := nil; for i := 0 to TreeView1.Items.Count - 1 do begin ATreeNode := TreeView1.Items[i]; if TreeView1.Items[i].Text = AItem then begin Result := ATreeNode; Break end end end;
其实,偶是要使name依次递增的,上面是为了叙述方便,结构如下: 超级用户 薪用户1 name passwd 薪用户2 …… 普通用户 新用户1 name passwd 薪用户2 ……代码: procedure Tf_yhgl.Button1Click(Sender: TObject); var newnode:ttreenode; begin if (treeview1.selected.text='超级用户') and(treeview1.selected.expanded=true) then begin newnode:=treeview1.items.addchild(treeview1.selected,'新用户'); newnode:=treeview1.items.addchild(newnode,'name'+'count1'); count1:=1; inc(count1); newnode.imageindex:=2; newnode.selectedindex:=2; newnode:=treeview1.items.add(newnode,'passwd'); newnode.imageindex:=3; newnode.selectedindex:=3; end else if treeview1.selected.text='普通用户' then begin newnode:=treeview1.items.addchild(treeview1.selected,'新用户'); newnode.imageindex:=1; newnode.selectedindex:=1; newnode:=treeview1.items.addchild(newnode,'name'+'count2'); count2:=1; inc(count2); newnode.imageindex:=2; newnode.selectedindex:=2; newnode:=treeview1.items.add(newnode,'passwd'); newnode.imageindex:=3; newnode.selectedindex:=3; end else exit; end;
TreeView1.ReadOnly := Assigned(TreeView1.Selected) and (TreeView1.Selected.Text = '超级用户') or (TreeView1.Selected.Text = '普通用户'))
TreeView1.ReadOnly := Assigned(TreeView1.Selected) and ((TreeView1.Selected.Text = '超级用户') or (TreeView1.Selected.Text = '普通用户'))
Assigned是什么方法呢?
最后一个括号好像没有与之对应的,
是特殊用法吗?
我前面一句已经说了,少了一个括号。
treeview:
超级用户
薪用户1
name
passwd
薪用户2
……
普通用户
新用户1
name
passwd
薪用户2
……“新用户1、name、passwd”这三个节点的位置,应该怎么表示呢?
var
i: Integer;
ATreeNode: TTreeNode;
begin
Result := nil;
for i := 0 to TreeView1.Items.Count - 1 do
begin
ATreeNode := TreeView1.Items[i];
if TreeView1.Items[i].Text = AItem then
begin
Result := ATreeNode;
Break
end
end
end;
二位师父:
怎么能实现,以下新用户在新建时的1,2,3,4……递增呢?
超级用户
薪用户1
薪用户2
……
普通用户
新用户1
薪用户2
……多谢了
Inc(Count1),然后将Count1值返回,就可以了。
超级用户
薪用户1
name
passwd
薪用户2
……
普通用户
新用户1
name
passwd
薪用户2
……代码:
procedure Tf_yhgl.Button1Click(Sender: TObject);
var
newnode:ttreenode;
begin
if (treeview1.selected.text='超级用户') and(treeview1.selected.expanded=true) then
begin
newnode:=treeview1.items.addchild(treeview1.selected,'新用户');
newnode:=treeview1.items.addchild(newnode,'name'+'count1');
count1:=1;
inc(count1);
newnode.imageindex:=2;
newnode.selectedindex:=2;
newnode:=treeview1.items.add(newnode,'passwd');
newnode.imageindex:=3;
newnode.selectedindex:=3;
end
else
if treeview1.selected.text='普通用户' then
begin
newnode:=treeview1.items.addchild(treeview1.selected,'新用户');
newnode.imageindex:=1;
newnode.selectedindex:=1;
newnode:=treeview1.items.addchild(newnode,'name'+'count2');
count2:=1;
inc(count2);
newnode.imageindex:=2;
newnode.selectedindex:=2;
newnode:=treeview1.items.add(newnode,'passwd');
newnode.imageindex:=3;
newnode.selectedindex:=3;
end
else
exit;
end;
1、Count1,Count2应该在FormCreate是初始化。即
count1 := 1; Count2 := 1 不能写在上面的代码中。
2、生成Text,好像应该是'name' + IntToStr(Count1)
偶刚才在别的例子上看到了IntToStr,因不知道要先做1的处理,没有f9成功,
所以放弃了,看来还要多多努力
有各位师父在,牛虻进步焉能不快,再拜
1、如果你不想让节点被编辑,不要劳师动众的让整个Treeview只读,应该设置某种状态下节点的AllowEdit的值。
2、如果你通过按钮来编辑Treeview,可以通过置按钮的Enable值来控制对树的编辑。如果通过popupMenu,则设置相应的菜单项的Enable;对于整个Treeview只读,只会让判断更复杂,我想你的问题之一就在与,当你解开只读时,不想被编辑的节点也可以被编辑了。在TreeView的OnEditing中设置条件,确定节点是否可以被编辑。