2

我有一个带有 2 个按钮的用户控件,只有当鼠标在控件区域内时才应该可见。

我正在显示这样的按钮:

private void Node_MouseEnter(object sender, EventArgs e)
{           
    btn1.Show();
    btn2.Show();
}

并像这样隐藏:

protected override void OnMouseLeave(EventArgs e)
{
    if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition)))
        return;
    else base.OnMouseLeave(e);
}

private void Node_MouseLeave(object sender, EventArgs e)
{  
    btn1.Hide();
    btn2.Hide();
}

问题是有时(随机情况)MouseLeave事件不会被触发,并且按钮保持可见,即使鼠标在控件之外。

是否有可能多个事件发生冲突?

4

1 回答 1

2

正如此链接所述

鼠标移动消息不够准确,它们不能保证报告每个遍历的像素。当您有一个靠近其父窗口边缘的子窗口时,当您移动鼠标足够快时,很容易无法为父窗口获取 MouseEnter。

所以,解决方案是只监听MouseEnter事件,当这个事件被触发时,我向其他控件发送通知,以隐藏其按钮。

不是最优雅的解决方案,但它按预期工作。

于 2013-03-06T10:05:47.220 回答