日期:2014-05-17  浏览次数:20814 次

◆如何屏蔽子控件鼠标经过事件◆
winform界面,在form上有个panel1,panel1有个子控件button1,现在我想实现当鼠标进入panel1时button1显示,鼠标离开panel1时button1隐藏,现在发现鼠标经过button1时也会触发panel1的mouseleave事件,我这样写如下代码,没有效果,请高手帮忙修改:
  private void panel1_MouseEnter(object sender, EventArgs e)
  {
  button1.Visible = true;
  }

  private void panel1_MouseLeave(object sender, EventArgs e)
  {
  button1.Visible = false;
  }

  private void button1_MouseEnter(object sender, EventArgs e)
  {
  button1.Visible = true;
  }

  private void MainForm_Load(object sender, EventArgs e)
  {
  button1.MouseEnter += new EventHandler(panel2_MouseEnter);
  }

  private void button1_Click(object sender, EventArgs e)
  {
  MessageBox.Show("1");
  }

------解决方案--------------------
如果你想实现类似VS开发环境的界面,我给你一个一劳永逸的建议,就是使用一个第三方控件包实现窗体停靠和伸缩管理,比如使用DotNetBar、BCGControlBar或者DevExpress。
------解决方案--------------------
是得先离开才能再进入。。。。
可以麻烦点:
panel1_MouseLeave里面判断一下
根据鼠标位置如果鼠标位置被包在panel范围内就不要隐藏button
  
这样就可以了。。
当然可能有更佳的解决方案。
 看楼下的了。。。
------解决方案--------------------
楼主你想想你的
panel1是个矩阵,每次触发MouseLeave的时候你可以开启一个线程来处理你的事情,
为什么要用线程,你需要休眠50毫秒,然后等待
button1_MouseEnter的事件触发以后,对一个全局变量进行赋值,然后判断一下就行了,

这样做的好处是如果你有button2,就不会受到这个方法的干扰了。

第二种做法
比较直接,每次
MouseLeave触发后,判断鼠标在WINFROM上的坐标,进行计算,虽然比较麻烦但是一劳永逸,你还可以封装一下。将来接着用。。