DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
No35309 の記事
■35309
/ )
Re[1]: 継承元フォームで各フォームのボタン動作を検知したい
□投稿者/ 魔界の仮面弁士
大御所(1509回)-(2022/12/30(Fri) 10:19:06)
■
No35308
に返信(sakuさんの記事)
> マウスでボタンにフォーカスがあたる(またはクリック)した事を検知
マウス操作に限定した検知ということでしょうか。
それともマウス以外の操作によるものも検出したいのでしょうか?
たとえば Windows Touch 操作や、スタイラスによるタップも
マウス操作によるクリックと同種に扱うという事で良いでしょうか。
フォーカス移動にはマウス操作だけでなく、Tab / Shift+Tab 移動もあります。
プログラムから Focus メソッドや SelectNextControl メソッド等によって
フォーカスが移り変わることもあります。
https://dobon.net/vb/dotnet/control/selectnextcontrol.html
Click イベントの発火には、Alt + ニーモニックキー によるショートカット、
フォーカス取得時の Space キーでの操作もあります。Form の
AcceptButton / CancelButton によるショートカット操作もありますし、
プログラムから PerformClick メソッドで呼ばれることもありますね。
別にマウス操作に限る必要は無いのなら、継承フォーム側で OnControlAdded を
オーバーライドして Button の追加を追跡しておき、そのボタンに対して
GotFocus/Enter/MouseDown/Click イベントを追跡するのが良いと思います。
その場合 Panel などの入れ子構造も再帰的にとらえる必要があるでしょう。
状況によっては、ControlRemoved イベント/ OnControlRemoved メソッドでの
解除処理も加えた方が良いかも知れません。
ボタン操作と言えば、非アクティブなフォームのボタンがクリックされた場合
・フォームおよびそのボタンがアクティブになるだけ
・フォームとボタンがアクティブになり、Click イベントまで発動
のどちらが好ましいか(Click Through の有無)という話があり、その切替を
WndProc をオーバーライドすることで制御することがあります。
https://learn.microsoft.com/en-us/archive/blogs/rickbrew/how-to-enable-click-through-for-net-2-0-toolstrip-and-menustrip
「イベント」を処理する代わりに、こうした「Windows Message」を処理することで
検出できるケースもあります。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、
返信フォーム
の上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
返信
削除キー/
編集
削除
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-