在WinFrom里如何获取鼠标滑过某一个控件的时候,
获取到一个控件的它的Name那!

解决方案 »

  1.   

    你要响应MouseMove事件,获取鼠标屏幕坐标,转换成为主窗口客户区坐标,然后再在主窗口的Controls数组里检索各控件的位置是否包含鼠标位置;
    或者响应每个控件的MouseEnter消息,然后通知主窗口。
      

  2.   

    private void Form1_Load(object sender, System.EventArgs e)
    {
    this.SetMouserMoveEvent(this);
    } private void contorl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    this.Text=((Control)sender).Name;
    }
    private void SetMouserMoveEvent(System.Windows.Forms.Control c)
    {
    c.MouseMove+=new MouseEventHandler(this.contorl_MouseMove);
    foreach (System.Windows.Forms.Control subControl in c.Controls)
    {
    subControl.MouseMove+=new MouseEventHandler(this.contorl_MouseMove);
    }
    }
      

  3.   

    private void button1_MouseEnter(object sender, EventArgs e)
            {
                MessageBox.Show(button1.Name);
            }
      

  4.   

    你要响应MouseMove事件,获取鼠标屏幕坐标,转换成为主窗口客户区坐标,然后再在主窗口的Controls数组里检索各控件的位置是否包含鼠标位置;这个方法最好,也是最通用的。或者响应每个控件的MouseEnter消息,然后通知主窗口。这个方法有点笨了,不过最直接,变化之后维护起来最麻烦。
      

  5.   

    刚才试着做了一下,JasonHeung(拥有一切也不过就这样笑着哭)的办法其实并不好,
    比较复杂,而且在进入其他控件之后,Form就不再收到MouseMove消息了。我的办法是这样: private void Form1_Load(object sender, System.EventArgs e)
    {
    foreach (Control ctrl in this.Controls)
    {
    ctrl.MouseEnter += new EventHandler(this.CtrlMouseEnter);
    } } private void CtrlMouseEnter(object sender, System.EventArgs e)
    {
    this.Text = ((Control)sender).Name;
    }
      

  6.   

    to: s5689412(华君)
    ctrl.MouseEnter += new EventHandler(this.CtrlMouseEnter);最好递归一下,否则在panel里的子控件是无法设置的
      

  7.   

    或者响应每个控件的MouseEnter消息,然后通知主窗口。这才是最好的办法,因为第一个办法要考虑控件重叠放置的问题的话,就非常麻烦了,还有第一个办法每一次MouseMove就要遍历一次控件,效率可能会比第二个办法更差。楼上的不失为一种优雅的解决方案。