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

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

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

Re[2]: フォーム上でのKeyDownの補足


(過去ログ 127 を表示中)

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

■75639 / inTopicNo.1)  フォーム上でのKeyDownの補足
  
□投稿者/ フォックス (1回)-(2015/04/17(Fri) 11:29:57)

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

VB2008を使用しています。

あるWindowsフォーム上でCtrl+指定キーを押すと
指定した処理が行われるようにしたいと思っています。
(もしかしたらAlt+指定キーにするかも知れません。)

ただし、このフォーム上のコントロールにフォーカスがあるためか、
FormのKeyDownまたはPreviewKeyDownイベントの補足ができません。

このフォームには、以下のコントロールが配置されています。
Form上…タブコントロールとボタン2つ
タブコントロール上…タブページが4つ
各タブページ上…DataGridViewが1つとボタンが3つ

例えば、任意のDataGridView上にフォーカスがある場合、
このDataGridViewのPreviewKeyDownイベントでキー押下を補足することができましたが、
実際にはどこにフォーカスがあるか分からないので、
このフォーム上のすべてのコントロールに対して
PreviewKeyDownイベントハンドラを設定する必要があるのでしょうか?

もしその必要がある場合、AddHandlerで動的にハンドラを設定することが、
今後のメンテナンスを考えた場合においても楽だと思いますが、
フォーム上のすべてのコントロールのリストを取得するにはどうすればいいのでしょうか?
(Form1.Controlsコレクションは、タブコントロールやPanelのような
コンテナ上のコントロールは含まれないのですよね?)
引用返信 編集キー/
■75640 / inTopicNo.2)  Re[1]: フォーム上でのKeyDownの補足
□投稿者/ 魔界の仮面弁士 (293回)-(2015/04/17(Fri) 11:48:28)
No75639 (フォックス さん) に返信
> あるWindowsフォーム上でCtrl+指定キーを押すと
> 指定した処理が行われるようにしたいと思っています。
> (もしかしたらAlt+指定キーにするかも知れません。)

まずは、フォームの KeyPreview プロパティを True にセットしてみててください。

そうすれば、コントロール個別に対応したりはせずとも、
フォーム側のイベント実装または基底メソッドのオーバーライドで済むはず。

それでも拾えないものがあれば、コントロール側のイベントで
個別に取り出すことになりますが、そういう物はあまり多くないはず。

別案としては、DirectInput で拾うという手もあるかな。
あるいは NativeWindow クラスでメッセージを拾い集めるとか。


> (Form1.Controlsコレクションは、タブコントロールやPanelのような
> コンテナ上のコントロールは含まれないのですよね?)
それらは Panel1.Controls などに含まれていますので、
再帰的に呼び出すように OK です。

ただしその場合、内包コントロールまで列挙してしまうので、
DataGridView が持つスクロールバーや
NumericUpDown が持つ上下ボタンや編集ボックスまで
抜き出されることになります。
引用返信 編集キー/
■75642 / inTopicNo.3)  Re[2]: フォーム上でのKeyDownの補足
□投稿者/ フォックス (2回)-(2015/04/17(Fri) 12:34:32)
魔界の仮面弁士様、早速のご回答ありがとうございました。

No75640 (魔界の仮面弁士 さん) に返信

> まずは、フォームの KeyPreview プロパティを True にセットしてみててください。

試したところ、PreviewKeyDownには効果がないようですが、フォームのKeyDownイベントで
キー押下を捕捉することができました。ありがとうございました。
(先ほどの投稿では、「捕捉」を「補足」と誤変換してしまいました。スミマセン...)

また、フォーム配下のコントロールの列挙方法につきましても、
アドバイス頂きありがとうございました。
今回はこれを試すことはないかも知れませんが、今後のために参考にさせて頂きます。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -