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");
  }

解决方案 »

  1.   

    如果你想实现类似VS开发环境的界面,我给你一个一劳永逸的建议,就是使用一个第三方控件包实现窗体停靠和伸缩管理,比如使用DotNetBar、BCGControlBar或者DevExpress。
      

  2.   

    是得先离开才能再进入。
       可以麻烦点:
    panel1_MouseLeave里面判断一下
       根据鼠标位置如果鼠标位置被包在panel范围内就不要隐藏button
      
    这样就可以了。。
      当然可能有更佳的解决方案。
     看楼下的了
      

  3.   

    楼主你想想你的
    panel1是个矩阵,每次触发MouseLeave的时候你可以开启一个线程来处理你的事情,
    为什么要用线程,你需要休眠50毫秒,然后等待
    button1_MouseEnter的事件触发以后,对一个全局变量进行赋值,然后判断一下就行了,这样做的好处是如果你有button2,就不会受到这个方法的干扰了。第二种做法
    比较直接,每次
    MouseLeave触发后,判断鼠标在WINFROM上的坐标,进行计算,虽然比较麻烦但是一劳永逸,你还可以封装一下。将来接着用。。