MouseLeave没有解雇C#WinForms

时间:2013-03-05 17:26:36

标签: c# winforms events mouseleave

我有一个带有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事件未被触发,并且按钮保持可见,即使鼠标位于控件之外也是如此。

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

1 个答案:

答案 0 :(得分:2)

作为this链接状态:

  

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

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

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