我目前用TreeView的Afterselected事件处理我的逻辑,问题是程序点击一个节点后再次点击该节点无响应,必须点完其他节点再回过头来点这个节点才能执行到Afterselected里的程序,如果在这个函数内部执行完我的程序将这个TreeView的SelectedNode设为null(C#)或nullptr(C++)的话,是可以连续点击同一个树节点的,但出现了一个奇怪的现象,当treeview所在窗体失去交点后,交点又回到该窗体,会自动选择树当前所见的第一个节点上,不管你鼠标有没有点击该节点,这个问题怎么去解决?

解决方案 »

  1.   

    已经选中了再选同一个,选区没改变当然不会触发Afterselected了
            TreeView TV = new TreeView();
            
            public Form1()
            {
                InitializeComponent();            TV.Parent = this;
                TV.Nodes.Add("1", "1").Nodes.Add("2", "2");
                TV.MouseClick += new MouseEventHandler(TV_MouseClick); 
            }        void TV_MouseClick(object sender, MouseEventArgs e)
            {
                MessageBox.Show(TV.GetNodeAt(e.Location).Text);
            }
      

  2.   

    不设SelectedNode=null,就不会出现吗?
      

  3.   

    设置 TreeView的SelectedNode 本身触发了Afterselected事件
      

  4.   

    回复
    设置 TreeView的SelectedNode 本身触发了Afterselected事件我原来也是这么想的,但是试验了一下发现设置SelectedNode=null后不会触发Afterselected事件回复 ASDFY
    不设置SelectedNode=null,连续两次点击在处理AfterSelect事件第二次是不能执行Afterselect的,这就有问题了,比如我在窗体中还有一些按钮或check控制树的逻辑处理,改变这些按钮后,第二次按同一个按钮就会出现不同的逻辑处理,问题是现在这样点第二次根本就不会执行AfterSelect事件回复wartim:
    但在程序外要经常得到树节点的Select状态和其它值,并且mouse——click我们也有其他的处理
      

  5.   

    用:
    mouseDown(object sender, MouseEventArgs e)
    {
      TreeNode node = treeView.GetChildAtPoint(e.X, e.Y);
    }