【发布时间】:2012-01-17 21:03:16
【问题描述】:
所以我有一个面板,在鼠标输入和鼠标离开时,我改变了一些停靠在其中的控件的可见性。
问题是每当我将鼠标悬停在面板中的控件上时,鼠标输入然后移动到该单独的控件,因此它们变得不可见。
有什么方法可以让我不必为面板中的每个控件编写这两个事件的代码就可以完成这项工作?
干杯:)
【问题讨论】:
标签: vb.net winforms visual-studio-2010 .net-4.0 onmouseover
所以我有一个面板,在鼠标输入和鼠标离开时,我改变了一些停靠在其中的控件的可见性。
问题是每当我将鼠标悬停在面板中的控件上时,鼠标输入然后移动到该单独的控件,因此它们变得不可见。
有什么方法可以让我不必为面板中的每个控件编写这两个事件的代码就可以完成这项工作?
干杯:)
【问题讨论】:
标签: vb.net winforms visual-studio-2010 .net-4.0 onmouseover
有趣的问题。如果您在 MouseEnter 或 MouseLeave 中放置一个 Console.WriteLine,您会注意到,当您的鼠标移到控件上时,它会隐藏,这会导致鼠标回到面板上,然后会显示导致控件隐藏的控件 ...
我弄清楚如何完成您的请求的唯一方法是删除 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;
}
【讨论】: