c#マウスホーバー/mouseleaveの要素を表示/非表示親の
-
18-09-2019 - |
質問
C#には、次のことがあります。
- a
UserControl
含むPictureBox
そして見えないFlowPanel
.
私が達成したいこと:
- いつ
UserControl
ホバリングされています(MouseHover
)、目に見えないFlowPanel
に設定されますvisible = true
. 。マウスが離れるときUserControl
またFlowPanel
, 、FlowPanel
設定する必要がありますvisible = false
.
使用 MouseLeave
の上 UserControl
マウスが入るとこのイベントがトリガーされるため、仕事はしません FlowPanel
. 。隠します FlowPanel
マウスが去るとき FlowPanel
それをしますが、バギーです(時には MouseLeave
トリガーされますが、時にはそうではありません)。
これを修正するための最良の方法は何ですか?
解決
私は自分のフォームの1つで似たようなことをしました
最初のイベント内でif(contorl.opacity = 1.0)を実行します
private void Form1_MouseLeave(object sender, EventArgs e)
{
if (this.ClientRectangle.Contains(this.PointToClient(Cursor.Position)))
{
this.Opacity = 1.0;
}
else
{
int loopctr = 0;
for (loopctr = 100; loopctr >= 5; loopctr -= 10)
{
this.Opacity = loopctr / 99.0;
this.Refresh();
Thread.Sleep(100);
}
}
}
他のヒント
場合の場合 FlowPanel.MouseLeave
トリガーされていません、そうではありません UserControl.MouseLeave
引き金になった?両方のイベントに隠れると、トリックができると思います。
これは一般的なUIの問題です。マウスイベントがサンプルとして出てくるため、一部のピクセルの位置が見逃され、コントロールがマウスアップイベントを取得できない可能性があります。
マウスホーバーがコントロール内で検出され、通常の間隔(342msなど)のカーソルの投票が検出された場合、それほど良くない方法は、何らかの形のタイマーをセットアップすることです。
所属していません StackOverflow