マウスのクリックイベントを確認

C# コンピュータ
C#

formでマウスのクリック関係のイベントを拾う場合いくつか種類があります。マウスのボタンを押した場合発生するMouseDownイベント次に押したボタンを離した場合発生するMouseUpイベント、これとは別にMouseClickやMouseDobuleClickなどのイベントがあります。
ダブルクリックした場合、すべてのイベントが発生すると思われますが、実際どうなっているか試してみたいと思います。

事前準備

ソース

ファイル名:clicktest.cs

using System;
using System.Windows.Forms;

/*
 クリックイベントの確認
*/

class Program
{
    [STAThread]
    static void Main()
    {
        Application.Run(new Form1());
    }
}

class Form1 : Form
{   
    // コンストラクタ
    public Form1()
    {
        // イベントを追加
        this.MouseDown += Form1_MouseDown;
        this.MouseUp += Form1_MouseUp;
        this.MouseClick += Form1_MouseClick;
        this.MouseDoubleClick += Form1_MouseDoubleClick;
    }
    
    
    // マウスボタン押し込み
    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        Console.WriteLine("{0}:MouseDown", e.Button);
    }
    // マウスボタン解放
    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        Console.WriteLine("{0}:MouseUp", e.Button);
    }
    // マウスボタンクリック
    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        Console.WriteLine("{0}:Click", e.Button);
    }
    // マウスボタンクリック
    private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        Console.WriteLine("{0}:DoubleClick", e.Button);
    }
}

コンパイル

PS>csc clciktest.cs

実行

PS>.\clciktest

結果

左ボタンをシングルクリック

Left:MouseDown
Left:Click
Left:MouseUp

右ボタンをダブルクリック

Right:MouseDown
Right:Click
Right:MouseUp
Right:MouseDown
Right:DoubleClick
Right:MouseUp

感想

ダブルクリックとシングルクリックで処理を分けるコードを考えていて、ダブルクリックの場合MouseClickイベントが発生してくれないほうが都合がよかったのですが、しっかり発生しています。
処理的にはクリックで選択ダブルクリックで決定するような処理なのですが、おのおののイベントに処理を記述すると上手くいきそうな気もしますが同じくらい不具合が出そうな予感もします。というわけでダメもとで挑戦してみたいと思います。

コメント