所以我有一个面板,在鼠标输入和鼠标离开时我改变了停靠在其中的一些控件的可见性。
问题是,当我将鼠标悬停在面板内的控件上时,鼠标输入会移动到该单独控件,从而使它们不可见。
有没有办法让这项工作无需为面板中的每个控件编码这两个事件?
干杯:)
答案 0 :(得分:1)
有趣的问题。如果你把一个Console.WriteLine放在MouseEnter或MouseLeave中你会注意到当你的鼠标移动到控件上时它会隐藏,这会导致鼠标返回到面板上,然后显示控件导致控件隐藏... < / p>
我想出如何完成请求的唯一方法是删除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;
}