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 に答える