我现在有一个panel上面是用来显示视频图像的。。但是我希望把控制图像的按钮也放在panel上,当鼠标移到pannel上时按钮就出现而且可以操作怎么实现,我的程序是winform的。(现在用我的方法是当我把鼠标移到按钮上时就不在panel上按钮就隐藏了。)求求各位大神们伸出你们的援手帮帮俺。新学在此跪谢了!

解决方案 »

  1.   

    试试
    MouseEnter事件 与 MouseLeave这两个事件
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace WindowsFormsApplication4
    {
        public partial class Form4 : Form
        {
            public Form4()
            {
                InitializeComponent();
            }    
            //按钮在一个Panel里面        private void panel1_MouseMove(object sender, MouseEventArgs e)
            {
                this.button1.Visible = true;
            }        private void panel1_MouseLeave(object sender, EventArgs e)
            {
                this.button1.Visible = false;
            }
        }
    }
      

  3.   

    chengpeng。。这个方法没有用还是鼠标到按钮上就隐形了。
      

  4.   

    在Panel的移出事件中  你需要判断一下 是否到button 上了
      

  5.   

    6楼  我不知道怎么判断呀。他在开的瞬间就离开了pannel根本就是无法到按钮上。。无法判断
      

  6.   


     bool IsVisible = false;private void panel1_MouseLeave(object sender, EventArgs e)
            {
                new System.Threading.Thread(_ => {
                    System.Threading.Thread.Sleep(100);
                    if (!IsVisible)
                    {
                        this.Invoke(new Action(() => button3.Visible = false));
                        IsVisible = false;
                    }
                }).Start();
            }        private void button3_MouseEnter(object sender, EventArgs e)
            {
                IsVisible = true;
            }        private void panel1_MouseEnter(object sender, EventArgs e)
            {
                button3.Visible = true;
            }        private void button3_MouseLeave(object sender, EventArgs e)
            {
                IsVisible = false;
            }
      

  7.   

      private void panel1_MouseMove(object sender, MouseEventArgs e)
      {
          this.button1.Visible = true;
      }  private void panel1_MouseLeave(object sender, EventArgs e)
      {
          Rectangle rect = new Rectangle(this.panel1.Location, this.panel1.Size);
          if(rect.Contains(this.PointToClient(Control.MousePosition)))
             this.button1.Visible = true;
          else
             this.button1.Visible = false;
      }
      

  8.   

    MouseEnter  事件中敲代码
      

  9.   

    解决了。谢谢cancerser哥。Sandy945
    的方法还有点小缺陷,谢谢大家的帮助了
      

  10.   

    MouseMove 那个贴错了 是MouseEnter
      

  11.   


    private bool IsMouseOver()
    {
        return Control.MousePosition.X > this.Location.X + panel1.Location.X + 8
            && Control.MousePosition.X < this.Location.X + panel1.Location.X + panel1.Size.Width
            && Control.MousePosition.Y > this.Location.Y + panel1.Location.Y + 30
            && Control.MousePosition.Y < this.Location.Y + panel1.Location.Y + panel1.Size.Height;
    }
    private void panel1_MouseLeave(object sender, EventArgs e)
    {
        if (!IsMouseOver())
            this.button6.Visible = false;
        else
            this.button6.Visible = true;
    }private void panel1_MouseEnter(object sender, EventArgs e)
    {
        this.button6.Visible = true;
    }
      

  12.   

    获取一下pannel的长宽高,当鼠标移动到那个范围内,就显示,出了就隐藏,这样应该能解决这个问题吧~~~