none
MouseClick事件点击treeView的节点获取节点的text值为什么要连续点击2次才能获取点击的值? RRS feed

  • 问题

  • MouseClick事件点击treeView的节点获取节点的text值

    为什么第一次获取到的总是上一次获取到的数,要再点击一下才能获得正常的值?这是什么原因?

    我看到别人的解决代码

    MessageBox.Show(e.Node.GetNodeCount(true).ToString());
    
    
    

    e.Node 为什么我这里打不出来?

    2011年3月10日 2:48

答案

  • 你好!

    我使用下面三个事件都是可行的,没有发现你的问题。可能其它代码所致。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          InitializeDemo();
        }
    
        void InitializeDemo()
        {
          TreeView tv = new TreeView();
    
          tv.Dock = DockStyle.Fill;
    
          tv.Nodes.Add("001");
          tv.Nodes.Add("002");
          tv.Nodes.Add("003");
    
          tv.NodeMouseClick += new TreeNodeMouseClickEventHandler(tv_NodeMouseClick);
          tv.AfterSelect += new TreeViewEventHandler(tv_AfterSelect);
          tv.MouseClick += new MouseEventHandler(tv_MouseClick);
    
          this.Controls.Add(tv);
        }
    
        void tv_MouseClick(object sender, MouseEventArgs e)
        {
          TreeView tv = sender as TreeView;
    
          var node = tv.GetNodeAt(e.X, e.Y);
    
          this.Text = node == null ? "null" : node.Text;
        }
    
        void tv_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
          //this.Text = e.Node.Text;
        }
    
        void tv_AfterSelect(object sender, TreeViewEventArgs e)
        {
          //this.Text = e.Node.Text;
        }
      }
    }
    
    


    知识改变命运,奋斗成就人生!
    2011年3月10日 5:13
    版主
  • MouseClick只是把鼠标的点击的一些事件带过来了,没有把节点的信息带过来。在WinForm中,大部分事件订阅的方法都有两个参数,一个是object sennder,指的是引发事件的控制本身,另一个是事件附带的参数,如果是EventArgs,就说明事件本身没有带参数,如果是EventArgs的子类,则说时有参数带过来。你没有点出e.Node,说明事件是从鼠标发过来的,不是从树节点发过来的。要把到树节点的点击事件才能发过来。

    山西.net俱乐部
    • 已标记为答案 My_Honey 2011年3月12日 4:10
    2011年3月10日 9:18
    版主

全部回复

  • 你好!

    我使用下面三个事件都是可行的,没有发现你的问题。可能其它代码所致。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          InitializeDemo();
        }
    
        void InitializeDemo()
        {
          TreeView tv = new TreeView();
    
          tv.Dock = DockStyle.Fill;
    
          tv.Nodes.Add("001");
          tv.Nodes.Add("002");
          tv.Nodes.Add("003");
    
          tv.NodeMouseClick += new TreeNodeMouseClickEventHandler(tv_NodeMouseClick);
          tv.AfterSelect += new TreeViewEventHandler(tv_AfterSelect);
          tv.MouseClick += new MouseEventHandler(tv_MouseClick);
    
          this.Controls.Add(tv);
        }
    
        void tv_MouseClick(object sender, MouseEventArgs e)
        {
          TreeView tv = sender as TreeView;
    
          var node = tv.GetNodeAt(e.X, e.Y);
    
          this.Text = node == null ? "null" : node.Text;
        }
    
        void tv_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
          //this.Text = e.Node.Text;
        }
    
        void tv_AfterSelect(object sender, TreeViewEventArgs e)
        {
          //this.Text = e.Node.Text;
        }
      }
    }
    
    


    知识改变命运,奋斗成就人生!
    2011年3月10日 5:13
    版主
  • MouseClick只是把鼠标的点击的一些事件带过来了,没有把节点的信息带过来。在WinForm中,大部分事件订阅的方法都有两个参数,一个是object sennder,指的是引发事件的控制本身,另一个是事件附带的参数,如果是EventArgs,就说明事件本身没有带参数,如果是EventArgs的子类,则说时有参数带过来。你没有点出e.Node,说明事件是从鼠标发过来的,不是从树节点发过来的。要把到树节点的点击事件才能发过来。

    山西.net俱乐部
    • 已标记为答案 My_Honey 2011年3月12日 4:10
    2011年3月10日 9:18
    版主
  • 肖小勇  的方法我没法用

     

    多谢 桂素伟 的提示 问题搞定了

    2011年3月12日 4:11
  • 你确认MouseClick时间发生后,输入焦点也确实发生改变了么?
    2011年3月12日 13:09