2009-03-31 7 views
0

テキストボックスにkeydownイベントを使用してテキストボックスに(Ctrl + A、Ctrl + Shift + X)などのキーボードショートカットをシミュレートしようとしていますが、少しのジレンマがあります。キーボードショートカットをシミュレートするときにスローされるイベントをログに記録するためにリストボックスを使用していますが、イベントは2回実行されます。私はそれが修飾キー(ctrl、alt、shift、winkey)+英数字キー(a-z 0-9)しか持たない場合、リストボックスにショートカットを記録するようにする方法を尋ねます。修飾キー+ A〜Zまたは0-9キーが押されている場合のみ、このロギングプロセスに行くための最も効率的な方法だろう何処理するtextbox_keydownイベントのキーボードショートカットをシミュレートしますか?

private void txtShortcut_KeyDown(object sender, KeyEventArgs e) 
    { 
     // Example key press: Ctrl + A 
     if (e.Shift || e.Control || e.Alt) 
     { 
      string s = (e.Shift ? Keys.ShiftKey.ToString() + " + " : "") + // Shift 
       (e.Control ? Keys.ControlKey.ToString() + " + " : "") + // Control 
        (e.Alt ? Keys.Menu.ToString() + " + " : "") + // Alt (menu) 
         e.KeyCode; // Key. 

      lbLogger.Items.Add(s); 
      // Logger Results: 
      // 1) ControlKey + ControlKey 
      // 2) ControlKey + A 
      // * I'm trying to get it to only post the second line and only log the line 
      // when a modifier key + a-z 0-9 key is pressed with it. 
     } 
    } 

+0

キーボードをまったくシミュレートするべきではありません。良い方法ではありません。なぜあなたはしたいですか? –

+0

私は、メニューやプログラムボタンのような他のメソッドにカスタムキーボードショートカットを設定できるようにするルーチンを作成しようとしています。 –

+0

あなたのコードはMike Powerのコードとほとんど同じです。それと同じ人ですか? http://stackoverflow.com/questions/676544 http://stackoverflow.com/questions/676518 – RvdK

答えて

2
private void txtShortcut_KeyDown(object sender, KeyEventArgs e) 
    { 
       // Example key press: Ctrl + A 
     if ((e.Shift || e.Control || e.Alt) && 
      (((e.KeyCode >= Keys.a) && (e.KeyCode <= Keys.z)) || 
      ((e.KeyCode >= Keys.A) && (e.KeyCode <= Keys.Z)) || 
      ((e.KeyCode >= Keys.NumPad0) && (e.KeyCode <= Keys.NumPad9)) || 
      ((e.KeyCode >= Keys.D0) && (e.KeyCode <= Keys.D9)))) 
     { 
      string s = (e.Shift ? Keys.ShiftKey.ToString() + " + " : "") + // Shift 
           (e.Control ? Keys.ControlKey.ToString() + " + " : "") + // Control 
             (e.Alt ? Keys.Menu.ToString() + " + " : "") + // Alt (menu) 
               e.KeyCode; // Key. 

      lbLogger.Items.Add(s); 
         // Logger Results: 
         // 1) ControlKey + ControlKey 
         // 2) ControlKey + A 
      // * I'm trying to get it to only post the second line and only log the line 
      // when a modifier key + a-z 0-9 key is pressed with it. 
     } 
    } 
+0

うわー、私はかなり独創的だったと言わなければなりません。多くの小道具。 –

関連する問題