现在做重命名node  的text的操作,同一Level不允许重复
在TTreeview的OnEdited事件里写
procedure TForm1.Tree_AEdited(Sender: TObject; Node: TTreeNode;
  var S: String);
begin
  if Trim(S)='' then
    begin
      S:=Node.Text;
      ShowMessage(NoValidName);
    end
    else if SameLevelExistsSameName(Node,S) then  //检测同Level是否有重名
       begin
       // ShowMessage('存在同名');
         Node.EditText;                    //*********
       end ;
end;问题://********行并不能进入编辑状态~~~~~
怎么弄?

解决方案 »

  1.   

    procedure TForm1.Tree_AEdited(Sender: TObject; Node: TTreeNode;
      var S: String);
    begin
      if Trim(S)='' then
        begin
          S:=Node.Text;
          ShowMessage(NoValidName);
        end
        else if SameLevelExistsSameName(Node,S) then  //检测同Level是否有重名
           begin
           // ShowMessage('存在同名');
             Node.Text='';
              Node.SetFoues();//*********
           end ;
    end;
      

  2.   

    问题://********行并不能进入编辑状态~~~~~怎么弄?你的问题我不太明白,你问的问题是不是和readonly有关,如果是只要将TreeView的属性值readonly值为false
      

  3.   

    不是ReadOnly的问题
    执行Node.EditText结点进去编辑状态
    但是在OnEdited里事件里执行Node.EditText
    却不能进入编辑状态
    我的意思就是在出现重名的情况下重新进入编辑状态to yangguo_god(杨过):
    Delphi Help :
    Call EditText to allow the user to edit the node'label. This method implicitly sets the Selected and Focused properties to True
      

  4.   

    看看这个
    procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
      var S: String);
    var
      n: integer;
      TmpNode: TTreeNode;
    begin
      TmpNode := Node.Parent;
      for n := 0 to TmpNode.Count - 1 do
        if TmpNode.Item[n] <> Node then
          if TmpNode.Item[n].Text = S then
            S := Node.Text;
    end;
      

  5.   

    我试了半天,还是无法实现楼主要的效果。看看能不能利用别的事件变通的实现吧。
    ----------------------------------------------
                       riff ur life
      

  6.   

    TreeView1Edited事件的发生在焦点转移后 (即光标在另一个NODE上)也就是你设置Node.EditText后,所以NODE不是处于编辑状态
      

  7.   

    to :wisenowa(127.0.0.1) :不行的呀
      

  8.   

    use CommCtrl; procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode; var S: String);
    begin
      if true then
      begin
        s:=node.Text;
        postMessage(TreeView1.Handle, TVM_EDITLABEL, 0, Longint(node.ItemId));
      end;
    end;
      

  9.   

    谢谢 findcsdn(findcsdn) ,用你的方法搞定