4

Ctrl変更されたキー (またはShift) が押されたとき、または離されたときに通知できるようにしたいと考えています。

基本的に、ユーザーは修飾キーを押したまま複数のキーストロークを実行できますが、私はそれが離されるまでアクションを実行したくありません ( EmacsCtrl+ X+を考えてSください)。

PreviewKeyUp と PreviewKeyDown を使用してこれを実行しようとしましたが、修飾子ではなく通常のキーを処理しているようです。イベントに参加すると、修飾キーが押されたかどうかはわかりますが、イベント間で修飾キーが離されて再度押されたかどうかはわかりません。

4

4 に答える 4

2
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
    // I just picked that key for a sample
    case Key.Tab:
        if (Keyboard.IsKeyDown(Key.LeftShift) ||
            Keyboard.IsKeyDown(Key.RightShift))
        {
            DoMyStuff();
        }


    // Similar things for Ctrl:

       if (Keyboard.IsKeyDown(Key.LeftCtrl) ||
           Keyboard.IsKeyDown(Key.RightCtrl))
        {
            ....
        }
于 2012-04-27T15:42:05.473 に答える
1

気づいたばかりKey.LeftShiftなど。そのため、押されたときにフラグを設定し、キーを離したときにそのフラグを確認することができます。

于 2012-04-27T15:39:08.430 に答える
0

最も簡単な方法は、どの修飾子が押されているかを取得したいときはいつでもこれを行うことです。

var kb = new Microsoft.VisualBasic.Devices.Keyboard();

var alt = kb.AltKeyDown;
var ctrl = kb.CtrlKeyDown;
var shift = kb.ShiftKeyDown;

それからメソッドを作成できるので、次のように簡単に操作できます。

using Microsoft.VisualBasic.Devices;

...

private static readonly Keyboard KEYBOARD = new Keyboard();

private static Keys GetPressedModifiers()
{
    var mods = Keys.None;

    if (KEYBOARD.AltKeyDown)
    {
        mods |= Keys.Alt;
    }

    if (KEYBOARD.CtrlKeyDown)
    {
        mods |= Keys.Control;
    }

    if (KEYBOARD.ShiftKeyDown)
    {
        mods |= Keys.Shift;
    }

    return mods;
}
于 2012-04-27T15:47:45.007 に答える
0

KeyDown または PreviewKeydown イベントでこのようなことを行うことができます。

Shiftここでは+の例を挙げていますA:

if (e.Key == Key.A && Keyboard.Modifiers == ModifierKeys.Shift)
{
    // Do something.
}
于 2013-01-02T13:07:46.233 に答える