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