
No.2ベストアンサー
- 回答日時:
Button等のコントロールには直接ショートカットキーを指定できませんので、KeyDownイベント等でキー状態で判別するしかありません。
> クリックイベントとKeyDownイベントに対して同一のイベントハンドラーにする方法
以下はかなりトリッキーな方法なので、素直にClickとKeyDownとで別々にイベントハンドラを作って、共通の処理メソッドを呼び出す方法を推奨します。
(ショートカットキーが「Ctrl + A」の時)
// InitializeComponent()の中
// またはButtonの動的生成場所
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button1.KeyDown += new System.Windows.Forms.KeyEventHandle(this.button1_Click);
// 共通のイベントハンドラ
private void button1_Click(object sender, EventArgs e)
{
if (e.ToString() == "System.Windows.Forms.KeyEventArgs") {
// KeyDownのイベントならキー状態を判別
KeyEventArgs k = (KeyEventArgs)e;
if (!(k.Control && (k.KeyCode == Keys.A))) {
// Ctrl + A 以外のKeyDownは除外
return;
}
}
// イベントの処理
}
ご丁寧なご回答を頂きましてありがとうございました。とても参考になりサンプルの方法をそっくり適用させて頂き、目的の機能をを実現することができました。非常にありがたく感謝いたしております。
私が作成中のプログラムの背景と今後の課題とを参考までに説明申し上げます。
視覚障害者のグループからC#を学びたいとの要望があり、基礎学習から皆様と勉強を始め、これまで当方からたくさんのサンプルプログラムを提供しております。これらのプログラムではボタンの選択時に、連続したタブキー操作により各ボタン名を音声表示するようにしております。ところが慣れてくると連続タブキー操作で目的の機能ボタンを探すのは、手間がかかり効率の悪さが問題になっており、目的機能ボタンを一発で使いたいと強く求めらておりました。彼等の記憶力は常人より格段に強く、プログラム利用2回ぐらいで、全てのボタン名を覚えてしまうので、この要望も無理ももないと思います。
今回のご教示頂きました方法では、目的ボタンにフォーカスがないと、ショトカットキーが働かないことが判りましたので、多少の変更を加えてみました。まずフォーム上でショートカットキーを受け取り、キーによりボタン判別を行い、そのボタンにフォーカスを当て、もう一度ショートカットキーを押して貰うようにし、その段階でご教示の方法を使っております。これでほぼ満足のできるレベルになったのではないかと思っておりますが、ショートカットキーの二回押しではなんともスマートでなく、今後の課題になっております。
また質問投稿した場合はどうかお助けくださいますようお願いいたします。本当にありがとうございました。
No.1
- 回答日時:
C#知らないんでとんでもない事をいっているのかもしれませんが
ショートカットキーってキャプションに & つければそれで終わりと違うんでしょうか?
言語違いますがそうするだけでそのショートカットで
クリックイベントが発生したと記憶しています
仮にそうならないならKeyDounイベントでそのボタンへのクリックイベントを
飛ばすってのはダメでしょうか?
場合によっては直接イベント関数コールしてもいいような気がするんですが
問題あるんでしょうか?(これならサンプル言うほどのこと無いですよね?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
C#でButtonのフォーカス枠を消したいのですが
C言語・C++・C#
-
-
4
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
【C#/Java?】try-catchでcatchせずにfinallyは一般的?
その他(プログラミング・Web制作)
-
7
C#で、テキストボックスの入力について。
C言語・C++・C#
-
8
panelのスクロール表示について
Visual Basic(VBA)
-
9
C# DataGridViewで複数選択したセルに同じ値を一括で入力するには
C言語・C++・C#
-
10
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
11
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
12
SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?
Visual Basic(VBA)
-
13
C#についてText Boxの枠
その他(ソフトウェア)
-
14
フォームの再読み込み
Visual Basic(VBA)
-
15
C# ログイン画面からメイン画面への画面遷移について
C言語・C++・C#
-
16
ボタンクリックイベント 重複防止について
C言語・C++・C#
-
17
矢印(左右)キーでイベントを発生させたい。
Visual Basic(VBA)
-
18
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
19
Ctrl + Cなど複数の入力キーの感知
Visual Basic(VBA)
-
20
C# DataGridView の列ヘッダーのマウス右クリックイベントにつきまして
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
[VB.net] ボタン(Flat)のEnable...
-
アイコンとボタンの違い
-
Excel VBA Application.caller...
-
Access VBA でデータペーストを...
-
VB.net でトグルボタンを実現し...
-
Vba コマンドボタンイベントの...
-
ほかのプロセスにボタンをクリ...
-
ボタン
-
ExcelVBAのコントロールの種類...
-
どう増強すべきか
-
複数のコマンドボタン(VBAで)...
-
パソコンへの「Dropbox...
-
AccessVBAで「dim dbs as datab...
-
Debug.exe実行時にWinMainCRTSt...
-
【マクロ】エラー【#DIV/0!】が...
-
フォーム1が開いているのならMs...
-
VB.NETでラベルの大きさってど...
-
クリックイベントなのに、2回ク...
-
Do While中のVBAアプリケーショ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
Excel VBA Application.caller...
-
VBA CommandButtonの文字ずれ
-
[VB.net] ボタン(Flat)のEnable...
-
コマンドボタンやイメージにマ...
-
VBAのボタンの位置が変わって困...
-
VB.net でトグルボタンを実現し...
-
フォームの再読み込み
-
閉じると「+」になり開くと「-...
-
アイコンとボタンの違い
-
ボタン
-
Access VBA でデータペーストを...
-
セルをマクロのボタンにしたい。
-
C#プログラムで、ボタンをショ...
-
ユーザーフォームに別シートか...
-
Excel マクロ 閉じるボタン
-
VBAで多数のプログラムを一つの...
-
ボタンをマウスで押し続けたと...
-
ASP.Net ラベルの内容をすぐに...
おすすめ情報