在Panel上鼠标移动事件对我不起作用

时间:2014-04-17 14:27:24

标签: c# winforms panel

我正在制作视频播放项目。我在面板中使用了播放/暂停/停止按钮,面板被禁用,最初不可见。我想通过鼠标移动事件启用它,但是当我在面板包含的区域中移动光标时,它不显示我的面板控件,这里是代码..

private void pnlOne_MouseMove(object sender, MouseEventArgs e)
{
    if (e.X >= top_left.X && e.X <= top_right.X && e.Y >= top_left.Y && e.Y <= bottom_left.Y)
    {
        pnlOne.Visible = true;
        pnlOne.Enabled = true;
    }
    else
    {
        pnlOne.Visible = false;
        pnlOne.Enabled = false;
    }
}

我现在能做什么?

4 个答案:

答案 0 :(得分:3)

一个看不见的面板不会抛出任何事件,所以真正做到这一点的唯一方法是使用计时器并检查鼠标是否在控件的区域内:

private Timer timer = new Timer();

public Form1() {
  InitializeComponent();
  timer.Tick += timer_Tick;
  timer.Start();
}

void timer_Tick(object sender, EventArgs e) {
  Rectangle r = pnlOne.RectangleToScreen(pnlOne.ClientRectangle);
  if (r.Contains(MousePosition)) {
    if (!pnlOne.Visible)
      pnlOne.Visible = true;
  } else {
    if (pnlOne.Visible)
      pnlOne.Visible = false;
  }
}

无需更改面板的Enabled属性(只需保留Enabled=true;),因为您似乎只关心当鼠标位于控件区域时显示面板。

答案 1 :(得分:0)

已经有一段时间了,但是我很确定如果控件的.Enabled设置为false,它将不会响应任何事件处理程序。您从被禁用的面板中获得了什么好处?你应该启用它然后尝试。正如Poomrokc 3年所说,确保该方法与控件绑定为事件处理程序。您不需要以编程方式添加它。您可以在设计器中手动设置它(不推荐)或选择面板,然后在“属性”面板中,转到事件处理程序并以此方式进行分配。

答案 2 :(得分:0)

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.X >= pnlOne.Location.X && e.X <= pnlOne.Location.X + pnlOne.Size.Width && pnlOne.Visible == false && e.Y >= pnlOne.Location.Y && e.Y <= pnlOne.Location.Y + pnlOne.Size.Height)
    {
        pnlOne.Visible = true;
        pnlOne.Enabled = true;
    }
}

private void pnlOne_MouseLeave(object sender, EventArgs e)
{
    pnlOne.Visible = false ;
    pnlOne.Enabled = false ;
}

答案 3 :(得分:0)

enable属性设置为false!

无论使用何种对象,都必须将enable属性设置为TRUE!