2009-03-24 14 views
2

このコードを使用して、テキストボックスのKeyDownイベントで修飾キーが押されているかどうかを検出しています。私は、実際の修飾キーの名前ではなくブール結果を表示しても文字Aのような非修飾キーがされている場合、修飾キーの最後に押されている非修飾キーを表示する方法をC#:このキーダウンイベントでは、修飾キー名+非修飾キー名をどのように表示しますか?

private void txtShortcut_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Shift || e.Control || e.Alt) 
     { 
      txtShortcut.Text = (e.Shift.ToString() + e.Control.ToString() + e.Alt.ToString() + e.KeyCode.ToString()); 

     } 
    } 

同時に押された?同じtxtShortcut.Text =();ですべてを行う方法はありますか?ライン?

+0

重複:http://stackoverflow.com/questions/676518/c-in-the-keydown-event-of-a-textbox-how-do-you-detect-currently-pressed-modifi –

+0

フォローアップの質問ではなく、重複した質問です。彼はこの質問の前の質問からの答えを使用しています – RvdK

答えて

2

を確認することができます。これは列挙型であるため、より人間的であるはずです。 ?また、ちょうど

string s = (e.Shift ? "[Shift]+" : "") + (e.Control ? "[Ctrl]+" : "") 
      + (e.Alt ? "[Alt]+" : "") + e.KeyCode; 
1

は使用:オペレータ

txtShortcut.Text = (e.Shift? "Shift ": "") + (e.Control? "Control ": "") + (e.Alt? "Alt ": "") + e.KeyCode.ToString()); 
0

をあなたはbool値に応じて、右の文字列を表示する必要があります。そのようなことを1つのステートメントで行うには? :演算子:

txtShortcut.Text = (e.Shift ? "[Shift]" : string.Empty) + 
        (e.Control ? "[Ctrl]" : string.Empty) + ...; 

は一般的に、それはです:

<someBool> ? <ifTrue> : <ifFalse> 

それはどのようなタイプで動作します。

0

は、.NET 3を使用している場合は、修飾キーのローカライズされた名前をサポートしていKeysConverterクラス、使用したいと思うでしょう。そうでなければ

var kc = new KeysConverter(); 
var result = kc.ConvertToString(e.KeyCode); 

を、あなたは三項演算子でそれを自分で行うことができます:

var keys = (e.Shift ? "[Shift]+" : string.Empty) 
      + (e.Control ? "[Ctrl]+" : string.Empty) 
      + (e.Alt ? "[Alt]+" : string.Empty) 
      + e.KeyCode; 
関連する問題