21

次のように、TextBlockのシングルクリックをキャッチできます。

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show("you single-clicked");
}

次のように、TextBlockのダブルクリックをキャッチできます。

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        if (e.ClickCount == 2)
        {
            MessageBox.Show("you double-clicked");
        }
    }
}

しかし、単一の TextBlock で両方をキャッチし、2 つを区別するにはどうすればよいでしょうか?

4

9 に答える 9

13

クリックシーケンスが終了した後にイベントを発生させる必要があります...それはいつですか? タイマーを使うことをお勧めします。MouseDown イベントはそれをリセットし、クリック数を増やします。タイマー間隔が経過すると、クリック数を評価するための呼び出しが行われます。

    private System.Timers.Timer ClickTimer;
    private int ClickCounter;

    public MyView()
    {
        ClickTimer = new Timer(300);
        ClickTimer.Elapsed += new ElapsedEventHandler(EvaluateClicks);
        InitializeComponent();
    }

    private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
    {
        ClickTimer.Stop();
        ClickCounter++;
        ClickTimer.Start();
    }

    private void EvaluateClicks(object source, ElapsedEventArgs e)
    {
        ClickTimer.Stop();
        // Evaluate ClickCounter here
        ClickCounter = 0;
    }

乾杯!

于 2010-01-18T16:29:21.863 に答える
4

違いを検出する必要がある場合は、次のようなコントロールを使用することをお勧めLabelします。

label.MouseDown += delegate(object sender, MouseEventArgs e)
{
    if (e.ClickCount == 1)
    {
        // single click
    }
};

label.MouseDoubleClick += delegate
{
    // double click
};

編集:私のアドバイスは、MSDNのドキュメントから次のとおりでした:

Control クラスは、PreviewMouseDoubleClick および MouseDoubleClick イベントを定義しますが、対応するシングルクリック イベントは定義しません。ユーザーがコントロールを 1 回クリックしたかどうかを確認するには、MouseDown イベント (または対応するイベントの 1 つ) を処理し、ClickCount プロパティの値が 1 であるかどうかを確認します。

ただし、これを行うと、ユーザーがシングル クリックした場合でも、シングル クリック通知が表示されます。

于 2010-01-18T13:41:12.387 に答える
2

2つを区別するには、タイマーを使用する必要があります。GUIのフォームにタイマーを追加します(その方法で最も簡単です-自動的に破棄などを処理します...)。私の例では、タイマーはと呼ばれてclickTimerいます。

private bool mSingleClick;

private void TextBlock_MouseUp(object sender, MouseButtonEventArgs e)
{

    if (e.Button == MouseButtons.Left)
    {
        if (e.ClickCount < 2)
        {
            mSingleClick = true;
            clickTimer.Interval = System.Windows.Forms.SystemInformation.DoubleClickTime;
            clickTimer.Start();
        }
        else if (e.ClickCount == 2)
        {
            clickTimer.Stop();
            mSingleClick = false;
            MessageBox.Show("you double-clicked");
        }
    }
}

private void clickTimer_Tick(object sender, EventArgs e)
{
    if (mSingleClick)
    {
        clickTimer.Stop();
        mSingleClick = false;
        MessageBox.Show("you single-clicked");
    }
}
于 2011-06-22T09:32:42.187 に答える
1

次のように、単純にMouseDownイベントを使用してクリック数をカウントできます。

if (e.ChangedButton == MouseButton.Left && e.ClickCount == 2)
{
    // your code here
}
于 2014-04-07T13:53:52.467 に答える
1

私はこの方法でそれを行いましたが、完全に機能します

If e.Clicks = 2 Then
            doubleClickTimer.Stop()
        ElseIf e.Clicks = 1 Then
            doubleClickTimer.Enabled = True
            doubleClickTimer.Interval = 1000
            doubleClickTimer.Start()


        End If


 Private Sub doubleClickTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles doubleClickTimer.Tick

        OpenWebPage("abc")
        doubleClickTimer.Stop()
    End Sub
于 2012-08-22T16:45:40.360 に答える
0

MouseDown の代わりに MouseUp で実行できます。そうすればClickCount、クリックの総数をプロパティに問い合わせて、その時点から何をすべきかを決めることができます。

于 2011-06-25T12:26:13.993 に答える