停止“儿童”控制从焦点?

时间:2012-01-17 21:03:16

标签: vb.net winforms visual-studio-2010 .net-4.0 onmouseover

所以我有一个面板,在鼠标输入和鼠标离开时我改变了停靠在其中的一些控件的可见性。

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

有没有办法让这项工作无需为面板中的每个控件编码这两个事件?

干杯:)

1 个答案:

答案 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;
    }