シングルクリックとダブルクリックを区別する必要がありますが、クリックイベント中にこれを行う必要があります。これが必要なのは、シングルクリックの場合は関数Aを呼び出し、ダブルクリックの場合は関数Bを呼び出したいからです。ただし、関数Aはシングルクリックの場合にのみ呼び出す必要があります。
C#(またはVB)の標準のWinformを使用してこれをどのように達成できますか?
シングルクリックとダブルクリックを区別する必要がありますが、クリックイベント中にこれを行う必要があります。これが必要なのは、シングルクリックの場合は関数Aを呼び出し、ダブルクリックの場合は関数Bを呼び出したいからです。ただし、関数Aはシングルクリックの場合にのみ呼び出す必要があります。
C#(またはVB)の標準のWinformを使用してこれをどのように達成できますか?
クリックとダブルクリックは別々に処理できます
クリック-> http://msdn.microsoft.com/en-US/library/system.windows.forms.control.click (v=vs.80).aspx
ダブルクリック-> http://msdn.microsoft.com/en-US/library/system.windows.forms.button.doubleclick (v=vs.80).aspx
クリックがシングルクリックであったかどうかを判断するには、クリックイベントの後に「ある程度の時間」待機するタイマーを使用する必要があります。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;
}
もう1つのオプションは、Buttonから派生するカスタムコントロールを作成してから、コンストラクターでSetStyles()メソッド(保護されたメソッド)を呼び出し、ControlStylesフラグを設定することです。
class DoubleClickButton : Button
{
public DoubleClickButton() : base()
{
SetStyle(ControlStyles.StandardDoubleClick, true);
}
}