1

私はおそらく単純な解決策に問題がありますが、私はそれを正しく理解していません。ですから、マウスの左ボタンを押すと何かが起こりたいのです。

private void DrawingPanel_MouseClick(object sender, MouseEventArgs e)
{  
  if (e.Button == MouseButtons.Left)
  {
   //something happens
  }
}

だから、それはうまくいきます。しかし今、問題は宿にあります。ここで、クリックイベント内でさらにクリック数をチェックしたいと思います(今、私はそれについて考えていますが、それも可能ですか?)次のようなものです。

private void DrawingPanel_MouseClick(object sender, MouseEventArgs e)
{  
  if (e.Button == MouseButtons.Left)
  {
   //something happens
   //blabla...
   if (e.Button == MouseButtons.Left)
   {
    //Do something
   }
  }
}

そのようなことは可能ですか?2番目if (e.Button == MouseButtons.Left)は常に真実だからです。自動的に真にならないようにするにはどうすればよいですか?

4

4 に答える 4

4

そのハンドラー内でマウスクリックイベントを1回処理するため、これは実装方法では機能しません。

代わりに、 Control.DoubleClick-eventを処理してみてください。

于 2013-01-07T13:00:14.050 に答える
1

イベントはMouseClickクリックごとに再入力されます(ダブルクリックは考慮されません)。
マルチクリック手順のロジックを作成しようとしている場合、簡単な解決策はクラスのクリックカウンターを維持することです。

private int clickNo = 0;

private void DrawingPanel_MouseClick(object sender, MouseEventArgs e)
{  
   if (e.Button == MouseButtons.Left)
   {
       clickNo++;
       switch (clickNo)
       {
           case 1: Foo(); break;
           case 2: Bar(); break;
           case 3: Baz(); clickNo = 0; break;
       }
   }
}
于 2013-01-07T13:02:34.737 に答える
0

2回のクリックがあるため、実際には2回のクリックイベントが発生します。ダブルクリック機能などをエミュレートしようとしていて、ダブルクリックイベントが機能しない場合は、最初のクリックに関する関連データを日時とともに、クラススコープの変数に保存します。 2回目のクリック時の日時と比較します。

于 2013-01-07T13:02:21.950 に答える
0

以下は、2回のクリックを実行するために、限られた時間間隔でダブルクリックをエミュレートします。この場合は300ミリ秒です。ActiveXイベントも機能しますが、MouseEventArgsではなくEventArgsのみを渡すため、使用が大幅に制限されます。

    private int _clicks = 0;
    private void DoWhateverOnDoubleClick(object sender, MouseEventArgs e)
    {
        if(e.Button != MouseButtons.Left)return; // We want left clicks only
        if (++_clicks == 2) 
            DoWhatever(); // if double click then do whatever
        Task.Run(() =>
        {
            Thread.Sleep(300);
            _clicks = 0;
        }); // Reset clicks after 300 ms

    }
于 2014-02-19T00:38:35.070 に答える