1.怎样实现在TTreeview上点击右键时也能改变它的Selected。
说明:设置RightClickSelect属性没用。
2.编辑完TTreview上某个结点的Text后,点击其它节点,TTreeview控件会自动的保存修改。我想在此时得到修改后的Text值,但是在OnEdited,OnEditing,OnChange,OnChanging事件中用Node.Text 和 Treeview1.Selected.Text得到的都是修改前的Text值

解决方案 »

  1.   

    上面是第二个问题下面是第一个问题:
    procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       if Button =mbRight then
          if Treeview1.GetNodeAt(X, Y)<>nil then
            Treeview1.Selected := Treeview1.GetNodeAt(X, Y) ;
    end;
      

  2.   

    OnGetSelectedIndex事件好像不对,随便写一个代码就进了死循环。
      

  3.   

    第二个问题解决了,但是有没有好一点的方法,难道必须写MouseDown事件吗?
      

  4.   

    procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;
      Node: TTreeNode);
    begin
    if Treeview1.Selected<>Node then
       SB.Panels[0].text:=Node.text;
    end;
      

  5.   

    procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;
      Node: TTreeNode);
    begin
    if Treeview1.Selected<>Node then
       showmessage(Node.text);
    end;
    这样都会死循环
      

  6.   

    可以定义一个Ttreenode的全局变量,让它等于Node,判断如果它等于Node,则退出这样可以了吧?!!以前我也碰到这种问题,一直没找到好的方法,只能出此下策了
      

  7.   

    我根本就没用过OnGetSelectedIndex事件,都不知道是用来干什么的
      

  8.   

    Occurs when the tree view looks up the SelectedIndex of a node.
      

  9.   

    楼上的,干脆你写个代码,实现:编辑完TTreview上某个结点的Text后,点击其它节点,TTreeview控件会自动的保存修改。我想在此时得到修改后的Text值(只要能把Text值Showmessage()出来就行)。谢谢了!我用OnGetSelectedIndex事件写的时候总是进死循环。
      

  10.   

    FNode是私有的全局变量TTreeNode类型的procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
       if Node<>FNode then
        begin
         if Fnode<>nil then
       showmessage(Fnode.text);
          FNode := Node;
        end;
    end;
      

  11.   

    为了实现只有修改后才Showmessage,改了一下代码,如下,结果还是显示的修改前的Text
    控件上面显示的好像是先把Edited和Change事件执行完之后才修改的Text的值
    procedure TForm1.TreeView1DblClick(Sender: TObject);
    begin
      Treeview1.Selected.EditText;
    end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      if Node<>FNode then
        FNode := Node;
    end;procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
      var S: String);
    begin
      if Fnode<>nil then
        showmessage(Fnode.text);
    end;
      

  12.   

    这样也行procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
      var S: String);
    begin
    showmessage(S);
    end;
      

  13.   

    OK,解决了!在OnEdited中用S
    谢谢wanwangzhiwang(万王之王)!非常感谢!