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で質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- Windows 10 Windowsのショートカットキーの割り当てについて質問です。 Ctrl+Shift+Rという入力を 1 2022/11/07 09:53
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Visual Basic(VBA) Edge操作のアプリが例外発生に 1 2023/03/12 21:22
- Windows 10 Windows10でボリュームのアップダウンを簡単にできる方法ないですか? 1 2023/06/20 13:06
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- その他(プログラミング・Web制作) PythonのプログラムのDirに関する質問です 3 2022/12/04 17:01
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 1 2022/06/18 21:20
- C言語・C++・C# visual studioでフォームデザインを作成する時のVB.netとC#の違い 2 2023/06/22 03:04
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
他のウィンドウのボタンを自動的に押したい
C言語・C++・C#
-
-
4
DataGridViewの各セル幅を自由に決め、その幅で固定したい
Visual Basic(VBA)
-
5
他のフォームから別のフォームのサブルーチンを呼び出す
Visual Basic(VBA)
-
6
VBの画面サイズについて
Visual Basic(VBA)
-
7
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
8
Enabled=Falseのテキストボックスの文字の色
Visual Basic(VBA)
-
9
【C#】 あるイベントから別イベントを呼び出す。
その他(プログラミング・Web制作)
-
10
DataGridViewのフォーカス遷移について
Visual Basic(VBA)
-
11
CloseとDisposeの違い
Visual Basic(VBA)
-
12
ラジオボタンの値の取得について(C++)
C言語・C++・C#
-
13
C# 点の描き方をおしえてください。
C言語・C++・C#
-
14
C#で通常のbuttonコントロールを継承したbuttonを作りたいのですが、、、
C言語・C++・C#
-
15
C# ログイン画面からメイン画面への画面遷移について
C言語・C++・C#
-
16
DataGridViewのカラムに自動で連番
Visual Basic(VBA)
-
17
Ctrl + Cなど複数の入力キーの感知
Visual Basic(VBA)
-
18
C# KeyDownイベントでショートカットキーを設定すると実行時に鳴るシステム音を無効にしたい
C言語・C++・C#
-
19
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
フォームの再読み込み
-
セルをマクロのボタンにしたい。
-
VBAのボタンの位置が変わって困...
-
VBA CommandButtonの文字ずれ
-
回数のカウント
-
CommandButtonのCaptionを変化...
-
コマンドボタンやイメージにマ...
-
ボタンにセットフォーカスする...
-
バックスペース機能の作り方
-
閉じると「+」になり開くと「-...
-
VBAでオプションボタンによって...
-
VBA IE ダウンロード ダイアロ...
-
C♯初心者で、四則演算の電卓を...
-
エクセル 検索マクロ オート...
-
Vba 電卓 一文字消すボタン
-
Access VBA でデータペーストを...
-
コントロールの背景色を
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
フォームの再読み込み
-
セルをマクロのボタンにしたい。
-
Excel VBA Application.caller...
-
コマンドボタンやイメージにマ...
-
プロシージャからイベントをコ...
-
Access VBA でデータペーストを...
-
VBAのボタンの位置が変わって困...
-
閉じると「+」になり開くと「-...
-
[Excel VBA]コマンドボタンの入...
-
ASP.Net ラベルの内容をすぐに...
-
Excel マクロ 閉じるボタン
-
ボタン
-
CommandButtonのCaptionを変化...
-
VB.NETでマウスクリックイベン...
-
ボタンの枠線の様なものを消したい
-
C#で動的に作ったtextboxを消す。
おすすめ情報