
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も見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
限定しりとり
文字数6文字以上の単語でしりとりしましょう
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
C#でButtonのフォーカス枠を消したいのですが
C言語・C++・C#
-
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
-
4
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
5
フォームの存在をチェックする方法
Visual Basic(VBA)
-
6
【C#】別フォームも同時に閉じるには?
C言語・C++・C#
-
7
C# Listを使わずに2次元配列の動的確保をしたいです。
C言語・C++・C#
-
8
GridViewでハイライトを使用しない方法
Visual Basic(VBA)
-
9
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
10
【C#/Java?】try-catchでcatchせずにfinallyは一般的?
その他(プログラミング・Web制作)
-
11
【C#】textBoxの指定行のデータを削除
C言語・C++・C#
-
12
C# Form上に配置されたコントロールに重なるように透過GIF(PNG)を表示したい
C言語・C++・C#
-
13
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
タイマーがいきなり動き出すん...
-
VBA(エクセル)で自動的にボタン...
-
VBA でのボタンの移動について
-
Excel VBA ボタンを非アクティ...
-
vb.net タイマーに引数を渡す
-
リストボックス 何も洗濯され...
-
Access VBA でデータペーストを...
-
Excel マクロ 閉じるボタン
-
プロシージャからイベントをコ...
-
OSXでC言語!!
-
ボタンをマウスで押し続けたと...
-
他のアプリケーションとの連携
-
EXCEL2003 オプションボタン複...
-
ボタンの文字色を変更したい
-
VBAで多数のプログラムを一つの...
-
コマンドボタンの文字色
-
セルをマクロのボタンにしたい。
-
ボタンコントロールの改行(Win...
-
わかりません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
Excel VBA Application.caller...
-
セルをマクロのボタンにしたい。
-
ボタンをマウスで押し続けたと...
-
フォームの再読み込み
-
コマンドボタンやイメージにマ...
-
VB.net でトグルボタンを実現し...
-
プロシージャからイベントをコ...
-
VBAで多数のプログラムを一つの...
-
Access VBA でデータペーストを...
-
TextBoxでEnterキーを押すと、...
-
VBAのボタンの位置が変わって困...
-
閉じると「+」になり開くと「-...
-
[VB.net] ボタン(Flat)のEnable...
-
Excel マクロ 閉じるボタン
-
C#プログラムで、ボタンをショ...
-
ASP.Net ラベルの内容をすぐに...
おすすめ情報