C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ClickとDoubleClickを判別したい

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■94664 / inTopicNo.1)  ClickとDoubleClickを判別したい
  
□投稿者/ お米粒 (1回)-(2020/04/30(Thu) 10:28:13)

分類:[VB.NET/VB2005 以降] 

WindowsForm上に配置した1つのコントロールにClickイベントとDoubleClickイベント両方を書いて、
DoubleClick時にはClickイベントを走らせないということはできるのでしょうか
ちなみに、DoubleClickを右クリックとかCtrl+Clickにする方向は最終手段だと考えています。

引用返信 編集キー/
■94665 / inTopicNo.2)  Re[1]: ClickとDoubleClickを判別したい
□投稿者/ とっちゃん (682回)-(2020/04/30(Thu) 11:05:10)
No94664 (お米粒 さん) に返信
> WindowsForm上に配置した1つのコントロールにClickイベントとDoubleClickイベント両方を書いて、
> DoubleClick時にはClickイベントを走らせないということはできるのでしょうか
> ちなみに、DoubleClickを右クリックとかCtrl+Clickにする方向は最終手段だと考えています。
>
ダブルクリックは、クリックの後、一定時間内にもう一度クリックすると発生します。
WindowsForms でどうなってるか確認したことはないですが、Windowsの仕組みそのままだとすると
ダブルクリックすると、Clickイベントの後一定時間内にDoubleClick イベントが送られてくると思います。

なので、Click イベントではダブルクリック時間でFormsのタイマーを発動し、ダブルクリックが来たら
タイマーをキャンセルして、ダブルクリックイベントを実行、タイマー通知が来たら
本来のクリックイベント処理を実行という形で作るのが一般的です。

ダブルクリックの時間は System.Windows.Forms.SystemInformation.DoubleClickTime で取得できます。

https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.systeminformation.doubleclicktime?view=netcore-3.1

引用返信 編集キー/
■94666 / inTopicNo.3)  Re[2]: ClickとDoubleClickを判別したい
□投稿者/ お米粒 (2回)-(2020/04/30(Thu) 11:56:23)
No94665 (とっちゃん さん) に返信
> ■No94664 (お米粒 さん) に返信
>>WindowsForm上に配置した1つのコントロールにClickイベントとDoubleClickイベント両方を書いて、
>>DoubleClick時にはClickイベントを走らせないということはできるのでしょうか
>>ちなみに、DoubleClickを右クリックとかCtrl+Clickにする方向は最終手段だと考えています。
>>
> ダブルクリックは、クリックの後、一定時間内にもう一度クリックすると発生します。
> WindowsForms でどうなってるか確認したことはないですが、Windowsの仕組みそのままだとすると
> ダブルクリックすると、Clickイベントの後一定時間内にDoubleClick イベントが送られてくると思います。
>
> なので、Click イベントではダブルクリック時間でFormsのタイマーを発動し、ダブルクリックが来たら
> タイマーをキャンセルして、ダブルクリックイベントを実行、タイマー通知が来たら
> 本来のクリックイベント処理を実行という形で作るのが一般的です。
>
> ダブルクリックの時間は System.Windows.Forms.SystemInformation.DoubleClickTime で取得できます。
>
> https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.systeminformation.doubleclicktime?view=netcore-3.1

教えていただいた情報を元に機能させることができました。
ありがとうございました。
解決済み
引用返信 編集キー/
■94667 / inTopicNo.4)  Re[1]: ClickとDoubleClickを判別したい
□投稿者/ Azulean (1145回)-(2020/04/30(Thu) 11:58:03)
2020/04/30(Thu) 11:59:09 編集(投稿者)

No94664 (お米粒 さん) に返信
> DoubleClick時にはClickイベントを走らせないということはできるのでしょうか
無理です。

ダブルクリックを構成するクリック 2 連打の初回のクリックは発生します。
とっちゃんさんがすでに書いているとおり、クリック→ダブルクリックは時間経過以外の判別方法がありません。


> ちなみに、DoubleClickを右クリックとかCtrl+Clickにする方向は最終手段だと考えています。

クリック→ダブルクリックと順次発生しても支障がないように、クリックの振る舞いを押さえておくが第一だと思います。
Explorer あれば、単なるクリックであれば選択、ダブルクリックであれば選択+実行となっているように、ダブルクリックとクリックが連続発生しても問題ない仕様にしています。

ダブルクリック受容時間はユーザーごとに設定でき、秒単位にも設定できるので「ダブルクリックでないと確定してからクリックの処理をする」はユーザービリティや反応が悪くなります。
「最終手段」とは言わず、積極的にクリックとダブルクリックの仕様見直しを考えた方が良いでしょう。
解決済み
引用返信 編集キー/
■94668 / inTopicNo.5)  Re[2]: ClickとDoubleClickを判別したい
□投稿者/ furu (30回)-(2020/04/30(Thu) 12:17:36)
2020/04/30(Thu) 12:18:24 編集(投稿者)
2020/04/30(Thu) 12:18:17 編集(投稿者)

No94665 (とっちゃん さん) に返信
> なので、Click イベントではダブルクリック時間でFormsのタイマーを発動し、ダブルクリックが来たら
> タイマーをキャンセルして、ダブルクリックイベントを実行、タイマー通知が来たら
> 本来のクリックイベント処理を実行という形で作るのが一般的です。
厳密に作ると
タイマー通知来る前に他のコントロールのイベント来たら(マウス動いたら?)
本来のクリックイベント処理しないといけないですね。
大変そう。

 コントロールAのクリック(ダブルクリック時間待ち)
 コントロールBのクリック
   ・タイマキャンセル
   ・コントロールAのクリックイベント処理
   ・コントロールBのクリックイベント処理

以下の場合もある。

 コントロールAのクリック(ダブルクリック時間待ち)
 マウス移動
 コントロールAのクリック
   ・タイマキャンセル
   ・コントロールAのクリックイベント処理
   ・タイマ起動

解決済み
引用返信 編集キー/
■94669 / inTopicNo.6)  Re[2]: ClickとDoubleClickを判別したい
□投稿者/ furu (31回)-(2020/04/30(Thu) 12:22:46)
No94667 (Azulean さん) に返信
> ダブルクリック受容時間はユーザーごとに設定でき、秒単位にも設定できるので

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc978662(v=technet.10)?redirectedfrom=MSDN

100-900 ( milliseconds, in decimal )

秒単位は無理みたい。
解決済み
引用返信 編集キー/
■94670 / inTopicNo.7)  Re[3]: ClickとDoubleClickを判別したい
□投稿者/ Azulean (1146回)-(2020/04/30(Thu) 15:10:11)
No94669 (furu さん) に返信
> https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc978662(v=technet.10)?redirectedfrom=MSDN
> 100-900 ( milliseconds, in decimal )
> 秒単位は無理みたい。

ツールを使っている方は長くなるかもしれないので。
https://www.inasoft.org/webhelp/rnsf7dlg/mouse.html#DoubleClickSpeed
解決済み
引用返信 編集キー/
■94672 / inTopicNo.8)  Re[4]: ClickとDoubleClickを判別したい
□投稿者/ furu (32回)-(2020/04/30(Thu) 15:31:01)
No94670 (Azulean さん) に返信
> ツールを使っている方は長くなるかもしれないので。
> https://www.inasoft.org/webhelp/rnsf7dlg/mouse.html#DoubleClickSpeed
そうなんですね。
失礼しました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ