今制作中のマップエディタは、MDI形式でフォームデザインされています。
ダブルクリック
編集エリアはMDIのクライアントを使用しており、GetMdiClient(this) で取得しています。これを EditScreen として管理しています。この EditScreen に対しては、親フォームのコンストラクタで動的にイベントを設定しています。実際には以下のようになります。
※ 長いのでマウスクリック関係のみ抜粋してます。

// 編集クライアント領域 private readonly MdiClient EditScreen; // コンストラクタ EditScreen = GetMdiClient(this); EditScreen.MouseDown += new MouseEventHandler(MdiClient_MouseDown); EditScreen.MouseMove += new MouseEventHandler(MdiClient_MouseMove); EditScreen.MouseUp += new MouseEventHandler(MdiClient_MouseUp); EditScreen.MouseClick += new MouseEventHandler(MdiClient_MouseClick);

理由は不明なのですが、ここに MouseDoubleClick イベントを設定しても、イベントが来ませんでした。マップエディタでは、配置済みのテキストに対して [Alt] キーを押しながら左ダブルクリックをしたら、テキスト内容の再編集としたかったので、自前でダブルクリック判定を実装しました。ネット検索しても私のような実装をしている例が見当たらなかったので、ご紹介します。

ダブルクリックとは、短い時間にタタッと二度連続してクリックする動作の事を指します。そのため、ダブルクリック間隔の短い時間を計測する必要がありました。私はここに Timer コントロールを使用しました。親となる MainForm に Timer コントロールを配置します。名前をとりあえず timerDblClick としました。それ以外は初期値のままです。
Timerコントロール
考え方としては、最初のクリック時に、この timerDblClick を Start させます。そして、二度目のクリックで timerDblClick.Enable が true だったら、ダブルクリックされたと判定しています。

ダブルクリックの間隔は Windows の場合は設定で変更する事が出来ます。そのため、自前でダブルクリックを実装するためには、その時間をシステムから取得する必要があります。こりは簡単で SystemInformation.DoubleClickTime を参照するだけでした。クリックに関する処理は以下のようになります。

if (timerDblClick.Enabled) { // ダブルクリック } else { // シングルクリック
// なんやかやの処理(;゚ロ゚) // ダブルクリック確認用タイマーを始動 timerDblClick.Interval = SystemInformation.DoubleClickTime; timerDblClick.Start(); }

timerDblClick は Enable になると、指定された時間間隔で連続して呼び出されてしまい、自動では停止しません。そのため、timerDblClick のタイマーイベントで Stop するように実装しています。

private void timerChkDoubleClick_Tick(object sender, EventArgs e) { // ダブルクリック確認用タイマーは一度で止める timerDblClick.Stop(); }

ということで、私はダブルクリック判定をこんな感じで実装しました。ネットを見ると e.ClickCount という便利なプロパティがあるとの事でしたが、Mdiクライアントから発生した Mouse Down イベントの MouseEventArgs e にはそれは確認できませんでした。代わり(?)に e.Clicks ってのはあったのですが、残念ながら一度目のクリックで処理していると、ダブルクリックタイミングでも 1 が入っていたので使えませんでした…。

ということで、C# で e.Clicks や e.ClickCount や MouseDoubleClick が使えなかったり、それ以外の言語で自前でダブルクリックを実装しなければならなくなった際の参考になれば幸いです。
※ たまたま見つけたコレ、充電でUSB接続端子がヘタって接点不良になってしまったので、これを使っていれば長持ちしそう!