これは重複ではありません。多くの同様のスレッドでは、修飾キーを含む組み合わせのキャプチャについて説明しています。
Insert+Tab
コントロールからショートカットキー(の組み合わせ)が押されたときに何かをトリガーする必要がありますButton
。
キャッチ:
これには、 .NETにチェック機能が組み込まれているよう
Alt
な修飾キーは含まれません。Shift
これは
Tab
、それほど簡単に捕まえられない鍵を持っています。
私が試し、近づいたこと:
1)KeyDownイベントですが、タブをキャプチャしません。
[DllImport("user32.dll")]
public static extern int GetKeyboardState(byte[] keystate);
static void form_KeyDown(object sender, KeyEventArgs e)
{
if (!(((Form)sender).ActiveControl is Button))
return;
byte[] keys = new byte[255];
GetKeyboardState(keys);
if (keys[(int)Keys.Insert] == 129 && keys[(int)Keys.Tab] == 129)
{
// doesn't work
}
if (keys[(int)Keys.Insert] == 129 && keys[(int)Keys.J] == 129)
{
// works, since here this doesnt involve Tab
}
}
これは通常の組み合わせで機能し、と一緒に起動しませんTab
。
2) キーをキャプチャするKeyPreviewイベントTab
ですが、キーの組み合わせを押す方法がわかりません
static void form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (!(((Form)sender).ActiveControl is Button))
return;
if (e.KeyCode == Keys.Tab)
//works
if (e.KeyCode == Keys.Insert && e.KeyCode == Keys.Tab)
//doesn't hit.
}
要件:
1)フォームクラスからイベントを登録していません。代わりに、必要なすべてのイベントを(他のショートカットとともに)作成するユーティリティクラスがあります。formのインスタンスを静的関数に渡すだけです。そのため、さまざまなキーオーバーライド呼び出しをどのように利用する必要があるのかよくわかりません。これが私がそれをする方法です:
public frmLogin()
{
InitializeComponent();
Utility.SetFormEvents(this);
}
static void SetFormEvents(Form f){
//foreach control...........
}
しかし、私はこれをあきらめることができます。
ありがとう..