2012-01-17 77 views
0

所以我有一个面板上的鼠标输入和鼠标离开我改变了它停靠在它的一些控制的可见性。停止“儿童”控制措施的重点?

问题是,只要我将鼠标悬停在面板内的控件上,鼠标输入就会移动到该单个控件,从而使它们不可见。

有没有什么办法可以使这项工作无需为面板中的每个控件编写这两个事件?

干杯:)

+0

[Panel not getting focus]的可能重复(http://stackoverflow.com/questions/3562235/panel-not-getting-focus) – 2012-01-17 21:29:34

回答

1

有趣的问题。如果你把一个Console.WriteLine放在MouseEnter或MouseLeave中,你会注意到当你的鼠标移动到控件上时,它隐藏起来,这会导致鼠标重新回到面板上,然后显示导致控件隐藏的控件...

我想出了如何完成请求的唯一方法是删除MouseEnter和MouseLeave事件。然后我将一个MouseMove事件添加到包含该面板的窗体中。我还为面板添加了一个MouseMove事件。这两个事件都会调用一个例程来检查鼠标的坐标,以确定它是否在面板上。如果MouseCheck例程返回true,则显示控件,如果不是则隐藏它们。下面的示例是C#,但我相信你可以抓住这个想法。

private bool MouseCheck(Control ctl, Point point) 
    { 
     bool blnRet = false; 

     if (point.X < ctl.Left) 
     { 
      blnRet = false; 
     } 
     else if (point.X > ctl.Left + ctl.Width) 
     { 
      blnRet = false; 
     } 
     else if (point.Y < ctl.Top) 
     { 
      blnRet = false; 
     } 
     else if (point.Y > ctl.Top + ctl.Height) 
     { 
      blnRet = false; 
     } 
     else 
     { 
      blnRet = true; 
     } 

     return blnRet; 
    }