KeyDown
でどのように判断できますか CtrlUp 押された。
private void listView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Control && e.KeyCode == Keys.Up)
{
//do stuff
}
}
同じ秒で両方のキーが正確に押されることはないため、機能しません。あなたはいつも最初に Ctrl そして他の...
次のようにKeyEventArgsの修飾子を確認できます。
private void listView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up && e.Modifiers == Keys.Control)
{
//do stuff
}
}
if (e.KeyCode == Keys.F1 && (e.Alt || e.Control || e.Shift))
{
//Do stuff...
}
KeyEventArgs
にはプロパティがあります Ctrl、 Alt そして Shift これらのボタンが押されているかどうかを示します。
Keyboard
オブジェクトを使用して、IsKeyDown
プロパティを検出することができます。また、ブラウザのショートカットを上書きしたくない場合は、Handled
プロパティをtrueに設定できます。ただし、ブラウザのショートカットを上書きする場合は混乱を招く可能性があるため注意してください。
private void Page_KeyDown(object sender, KeyEventArgs e)
{
// If leftCtrl + T is pressed autofill username
if (Keyboard.IsKeyDown(Key.T) && Keyboard.IsKeyDown(Key.LeftCtrl))
{
txtUser.Text = "My AutoFilled UserName";
e.Handled = true;
}
}
private void listView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up && Keyboard.IsKeyDown(Key.LeftCtrl))
{
//do stuff
}
}
このコードは、最初にLeftCtrlを押し、次に「UP」を押した場合にのみ機能します。順序に重要性がない場合は、次のことをお勧めします。
if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))&& Keyboard.IsKeyDown(Key.Z))
{
//do stuff
}
その場合、両方のCtrlが考慮され、順序は重要ではありません。
ModifierKeysプロパティを使用できます。
if (e.KeyCode == Keys.Up && (ModifierKeys & Keys.Control) == Keys.Control)
{
// CTRL + UP was pressed
}
ModifierKeys値は値の組み合わせになる可能性があるため、それを検出する場合は、 CTRL の状態に関係なく押された SHIFT または ALT キーの場合、上記のサンプルのようにビットごとの比較を実行する必要があります。他の修飾子が押されていないことを確認する場合は、代わりに同等性を確認する必要があります。
if (e.KeyCode == Keys.Up && ModifierKeys == Keys.Control)
{
// CTRL + UP was pressed
}
以下のコードをテストしました。できます...
private void listView1_KeyDown(object sender, KeyEventArgs e)
{
if ((int) e.KeyData == (int) Keys.Control + (int) Keys.Up)
{
MessageBox.Show("Ctrl + Up pressed...");
}
}
[Alt] [Right]を検出しようとしたときに最終的に必要なヒントを見つけるのに時間がかかりました。ここで見つけました: https://social.msdn.Microsoft.com/Forums/vstudio/en-US/4355ab9a-9214-4fe1-87ea-b32dfc22946c/issue-with-alt-key-and-key -down-event?forum = wpf
私が使用するShortcut
ヘルパークラスでは、次のように要約されます。
public Shortcut(KeyEventArgs e) : this(e.Key == System.Windows.Input.Key.System ? e.SystemKey : e.Key, Keyboard.Modifiers, false) { }
public Shortcut(Key key, ModifierKeys modifiers, bool createDisplayString)
{
...
}
元の値を「再マッピング」した後(e.Key == System.Windows.Input.Key.System ? e.SystemKey : e.Key
part)、さらに処理を続行できます。
これは確実に機能します。 KeyUp
ではなく、keyDown
イベントを処理するように注意してください。
private void mainForm_KeyUp(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A)
{
//insert here
}
}
私にとっては、keyDown
は機能せず、keyU
pは代わりに同じコードで機能しました。
理由はわかりませんが、何らかのキーを押した直後にkeyDown
イベントが発生するようです。 ctrl キーなので、押した場合 ctrl+Up あなたが押します ctrl 前のキー UP キーを押すと、他のキーを押す前にイベントが発生し、2番目のキーを押すとイベントが再びトリガーされます。
KeyUp
を使用している間、キーを放すまでイベントはトリガーされません。 ctrl、2番目のキーを押すと、1つのイベントがトリガーされます。