我虽然用过TREEVIEW
这个问题我没见过
我也不能给你试试了
因为我装得是D6
启动太慢
帮助UP
实在没人帮你解决
明天再说
今天有点晚了

解决方案 »

  1.   

    那你这么写:
    TreeView1.ReadOnly := Assigned(TreeView1.Selected) and (TreeView1.Selected.Text = '超级用户') or (TreeView1.Selected.Text = '普通用户'))
      

  2.   

    少了一个括号,
    TreeView1.ReadOnly := Assigned(TreeView1.Selected) and ((TreeView1.Selected.Text = '超级用户') or (TreeView1.Selected.Text = '普通用户'))   
      

  3.   

    问题解决了,多谢了
    Assigned是什么方法呢?
    最后一个括号好像没有与之对应的,
    是特殊用法吗?
      

  4.   

    Assigned(TreeView1.Selected)等价于TreeView1.Selected <> nil
    我前面一句已经说了,少了一个括号。
      

  5.   

    多谢师父指点,偶又攻克一个问题,但还有一个写法,偶掌握不住:超级用户
    treeview:
    超级用户
        薪用户1
            name
            passwd
        薪用户2
        ……
    普通用户
        新用户1
            name
            passwd
        薪用户2
        ……“新用户1、name、passwd”这三个节点的位置,应该怎么表示呢?  
      

  6.   

    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;
      

  7.   

    隐师父也来了,太好了,yeah~~
    二位师父:
    怎么能实现,以下新用户在新建时的1,2,3,4……递增呢?
    超级用户
        薪用户1
        薪用户2
        ……
    普通用户
        新用户1
        薪用户2
        ……多谢了
      

  8.   

    内置两个计数器。Count1, Count2,每次新建时,就
    Inc(Count1),然后将Count1值返回,就可以了。
      

  9.   

    其实,偶是要使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;
      

  10.   

    几个错误:
    1、Count1,Count2应该在FormCreate是初始化。即
    count1 := 1; Count2 := 1 不能写在上面的代码中。
    2、生成Text,好像应该是'name' + IntToStr(Count1)
      

  11.   

    成功了,师父所说极是,
    偶刚才在别的例子上看到了IntToStr,因不知道要先做1的处理,没有f9成功,
    所以放弃了,看来还要多多努力
    有各位师父在,牛虻进步焉能不快,再拜
      

  12.   

    提几个建议
    1、如果你不想让节点被编辑,不要劳师动众的让整个Treeview只读,应该设置某种状态下节点的AllowEdit的值。
    2、如果你通过按钮来编辑Treeview,可以通过置按钮的Enable值来控制对树的编辑。如果通过popupMenu,则设置相应的菜单项的Enable;对于整个Treeview只读,只会让判断更复杂,我想你的问题之一就在与,当你解开只读时,不想被编辑的节点也可以被编辑了。在TreeView的OnEditing中设置条件,确定节点是否可以被编辑。