新建一个树节点,节点名设置为空,然后让此节点处于被编辑状态,好让用户输入新的节点名。但是用户在新建节点后,如果直接按下Enter或者Esc键,则我写在OnEdited事件里的代码没有起到作用(该代码用来检查节点名是否为空或节点重名),只有用户在树节点的标签编辑框中真正有修改的时候,OnEdited事件才起到做用,请问我应该怎么使新建节点之后,马上就能使OnEdited事件有效呢?///////////////////////////////////////////////////////////////////
  新建树节点的代码如下:
  var
    tNode : TTreeNode;
  begin
    tNode := tv.Items.AddChild(tv.Selected, '');
    tNode.MakeVisible;
    tv.Selected := tNode;
    tNode.EditText;
  end;//////////////////////////////////////////////////////////////////OnEdited的代码如下:
procedure Tfrm_main.tvEdited(Sender: TObject; Node: TTreeNode;
  var S: string);
var
  I:integer;
begin  //节点名为空
 if Length(Trim(S)) = 0 then
  begin
    Application.MessageBox('节点名不能为空!','提示',MB_OK+MB_ICONWARNING);
    tv.Selected := Node;
  end;  if Length(Trim(S)) > 0 then
  begin
    for I:= 0 to tv.Items.Count -1 do
    begin
      if tv.Items[I].Text = S then
      begin
         Application.MessageBox('已经有相同的节点名存在了,请重新命名!','提示',MB_OK+MB_ICONWARNING);
         tv.Selected := Node;
         break;
      end;
    end;
  end;
end;

解决方案 »

  1.   

    试试在初始时把readonly设为true,触发时再设成false。我没仔细看你的程序,错了别骂我……
      

  2.   

    写在TreeView 的onkeyup
    var
        tNode : TTreeNode;
        s:string;
    begin
     s:=  chr(Key);
     if Length(Trim(S)) = 0 then
      begin
        Application.MessageBox('节点名不能为空!','提示',MB_OK+MB_ICONWARNING);
        //这里只是测试,要换成你自己点到的节点,设置个公有变量
        tNode :=tv.Items.GetFirstNode ;
        tNode.Selected;
        tNode.EditText;
      end;
    end;