1

我有一个面板,上面有 2 个按钮。我要做的是,当鼠标在面板区域内时,按钮可见,而当鼠标位置不在面板区域时,按钮不可见。

我正在使用面板上的MouseEnterandMouseLeave事件。

MouseEnterbutton.Show()MouseLeave我做button.Hide()

这看起来很简单,但是当按钮可见时(鼠标在面板区域内)它们是不可点击的(点击事件不会被触发)。

一些调试表明,当鼠标悬停在按钮上时,事件MouseEnterMouseLeave不断被调用。

对此有什么建议吗?这应该很容易做到,以至于我实际上没有想法。

4

2 回答 2

4

发生这种情况是因为当您的鼠标悬停MouseLeave在面板上时,任何按钮事件都会触发,因此按钮再次不可见并且鼠标重新回到面板上,从而立即触发MouseEnter并显示它们。

如果您在属于该面板的任何控件上,则通过添加一些检查MouseLeave事件的标志来修复您的逻辑,如果是,请不要隐藏它们。

编辑:这里有一个示例来解决您的问题 -来自 Panel 及其子控件的 MouseEnter 和 MouseLeave 事件

于 2013-03-05T09:51:23.773 回答
0

这是gzaxx引用的另一个主题中提出的解决方案

 protected override void OnMouseLeave(EventArgs e)
        {
            if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
                return;
            else
            {
                base.OnMouseLeave(e);
            }
        }
于 2013-03-05T10:04:45.463 回答