1

2つのボタンが付いたパネルがあります。私がやろうとしているのは、マウスがパネル領域内にある場合はボタンが表示され、マウスの位置がパネル領域外にある場合はボタンが表示されないことです。

パネルのイベントMouseEnterとイベントを使用しています。MouseLeave

MouseEnterがすることbutton.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 に答える