不好意思,好多年没用delphi了,现在要修改一个程序的界面,其中有一个TTreeView,如:
--系统
  --登录
  --注销
--业务
  --开户
类似上面的结构,我要实现的功能是:点中'登录'的时候,弹出一个登录窗口,点中'开户'的时候
弹出一个开户操作的窗口,我想要知道的是:
1、如何来判断我当前是点中的是'登录'?
2、我点中的不同的子节点都会有一个相关的窗口弹出,这个能不能用一种简单的类似于case语句
   来控制,如:
   case (?) of 
     ?: LoginClick;   //选中的是登录
      ?:...?          //选中的是注销   end;

解决方案 »

  1.   

    TreeView.Selected.Text可以返回节点的文字,然后你判断一下
      

  2.   


    procedure TForm1.FormCreate(Sender: TObject);
    var
      node,subNode : TTreeNode;
    begin  node := TreeView1.Items.Add(nil,'系统');
      TreeView1.Items.Addchild(node,'登录');
      TreeView1.Items.Addchild(node,'注销');  node := TreeView1.Items.Add(nil,'业务');
      TreeView1.Items.Addchild(node,'开户');end;procedure TForm1.TreeView1Click(Sender: TObject);
    begin
      if not Assigned(TreeView1.Selected) then exit;  ShowMessage(TreeView1.Selected.Text);
    end;
      

  3.   

    case treeview1.Selected.Index of只能判断出同类节点的index值:0,1,2...
    如果内容不多的话,可以自己进行判断:
     if treeview1.Selected.Text=‘登录' then ShowMessage('ok');
      

  4.   

    case只是针对返回值为整型的数值,对string好像不可以。
      

  5.   


    Node.data   這是個指針來的,你可翠通過他來做。放入一個結構,或類來處理
      

  6.   

    Node.data 放入对象,直接取出点击节点对象,调用相对应的操作
      

  7.   

    你应该定义一个结构体存放到Node.data 也许该换个表现形式,这么做还是免不了判断的!
      

  8.   


    那就用if 來判斷吧.
    if  treeview1.Selected.Text=‘登录' then  begin end
    if  treeview1.Selected.Text=‘注销' then  begin end 
    ...
      

  9.   

    case怎么不行呢?每个节点都有INDEX。根据INDEX是可以的啊!
      

  10.   


    {我刚才试了试,写了一个方法仅供参考,稍微有点复杂:}
    private
        { Private declarations }
        tvarr: array of string;{保存treeview的节点名称}
        function ReTVIndex(tvtest: TTreeView): Integer;{返回treeview对应的index值(实际为tvarr的下标)}
    {将节点的名称保存在数组里面}
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i: Integer;
    begin
      SetLength(tvarr, TreeView1.Items.Count);
      for i := 0 to TreeView1.Items.Count - 1 do
      begin
        tvarr[i] := TreeView1.Items[i].Text;
        Memo1.Lines.Add(IntToStr(i) + '--' + tvarr[i]);{主要是为了看的清晰,可以删掉}
      end;
    end;
    {这个函数很简单,判断选择的节点名称是否和数据里面的相等,如果相等则返回数组下标}
    function TForm1.retvindex(tvtest: TTreeView): Integer;
    var
      i: Integer;
      str: string;
    begin
      str := tvtest.Selected.Text;
      for i := 0 to tvtest.Items.Count - 1 do
        if tvarr[i] = str then Result := i;
    end;
    {这里建议用双击事件,单击事件如果选择到节点前面的'+'号就会触发单击事件,操作起来麻烦}
    procedure TForm1.TreeView1DblClick(Sender: TObject);
    begin
      case retvindex(TreeView1) of
        0: ShowMessage(IntToStr(retvindex(TreeView1)) + TreeView1.Selected.Text);
        {用到哪几个节点的事件就写在这里,默认的节点编号是从0开始的}
      end;
    end;
      

  11.   

    谢谢楼上的各位,问题已经解决了,虽然用了一个很笨的方法,但是对后续追加节点修改比较简单,个人认为用节点的index来做并不是一个好办法,因为如果要在中间加个点程序修改就麻烦了。