0

C# では、次のようになります。

  • と非表示のUserControlを含む。PictureBoxFlowPanel

私が達成したいこと:

  • UserControlカーソルを合わせると ( MouseHover)、 非FlowPanel表示が に設定されvisible = trueます。マウスが UserControl または から離れたら、を設定FlowPanelする 必要があります。FlowPanelvisible = false

MouseLeaveこのイベントは、マウスが に入ったときにトリガーされるため、 onを使用しUserControlても機能しませんFlowPanelFlowPanelマウスが離れたときにそれを非表示にしますFlowPanelが、バグがあります(トリガーされる場合MouseLeaveとトリガーされない場合があります)。

これを修正する最善の方法は何ですか?

4

3 に答える 3

2

私は自分のフォームの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);
      }
   }
}
于 2009-12-10T13:45:23.003 に答える
0

発動しない場合FlowPanel.MouseLeaveは発動しないUserControl.MouseLeave?両方のイベントを非表示にすることでうまくいくと思います。

于 2009-12-10T13:26:37.307 に答える
0

これはよくある UI の問題です。マウス イベントはサンプルとして表示されるため、一部のピクセル位置が失われ、コントロールがマウス アップ イベントを取得しない可能性があります。

コントロール内で MouseHover が検出されたときに何らかの形式のタイマーを設定し、定期的な間隔 (342ms など) でカーソルをポーリングするのは、あまり良くない方法です。

于 2009-12-10T13:30:49.610 に答える