2012-05-07 6 views
2

ワンクリックとダブルクリックを区別する必要がありますが、クリックイベント中にこれを行う必要があります。私はこれが必要です。なぜなら、シングルクリックがあれば、関数Aを呼びたいからダブルクリックがあれば関数Bを呼び出したいからです。しかし、関数Aはシングルクリックの場合にのみ呼び出さなければなりません。ダブルクリックでないときにWinFormsコントロールのクリックイベントを処理する方法

C#(またはVB)で標準のWinformsを使用してこれを実現するにはどうすればよいですか?

答えて

3
+2

ダブルクリックがあってもクリックが発生します。 – Daniel

+1

簡単な方法はありません。 MouseDownイベントを処理してクリックとdblclickを区別する例を次に示します。 http://msdn.microsoft.com/en-us/library/ms171543(v=vs.80).aspx – Tilak

+0

このリンクを使用して終了しました。わずかな変更。ありがとう。 – Daniel

3

は、あなたがクリックした後、タイマー待機「ある程度の時間」を使用する必要があります。クリックしたかどうかを判断するためのイベントです。 SystemInformation.DoubleClickTimeプロパティを使用して、システムが連続したクリックをダブルクリックとみなすクリック間の最大間隔を判断できます。あなたはおそらくこれに少し詰め物を追加したいと思うでしょう。

クリックハンドラでは、クリックカウンターを増分してタイマーを開始します。ダブルクリックハンドラで、ダブルクリックが発生したことを示すフラグを設定します。タイマーハンドラで、ダブルクリックイベントが発生したかどうかを確認します。そうでなければ、それはシングルクリックでした。このような

何か:

private bool _doubleClicked = false; 
private Timer _clickTrackingTimer = 
    new Timer(SystemInformation.DoubleClickTimer + 100); 


private void ClickHandler(object sender, EventArgs e) 
{ 
    _clickTrackingTimer.Start(); 
} 

private void DoubleClickHandler(object sender, EventArgs e) 
{ 
    _doubleClicked = true; 
} 

private void TimerTickHandler(object sender, EventArgs e) 
{ 
    _clickTrackingTimer.Stop(); 

    if (!_doubleClicked) 
    { 
     // single click! 
    } 

    _doubleClicked = false; 
} 
+0

これは素晴らしい考えです。どうもありがとう! – Daniel

+0

残念ながら、DoubleClickHandlerは決して起動されません。 – Daniel

+1

_doubleClickedフラグの代わりに、別のオプションは、カウンタを増分してから、タイマーハンドラのカウンタをクリアすることによってClickHandlerのクリック数をカウントすることです。 – roken

0

別のオプションボタンから派生するカスタムコントロールを作成し、保護された方法であるSetStyles()メソッドを呼び出す)コンストラクタにしてたControlStylesを設定することですフラグ

class DoubleClickButton : Button 
{ 
    public DoubleClickButton() : base() 
    { 

     SetStyle(ControlStyles.StandardDoubleClick, true); 
    } 
} 
関連する問題