2016-04-10 15 views
0

私のプログラムでは、キーボードで "E"を入力し、テキストボックスに別の文字として出力することができます。 "F"。アプリケーションでのキーの再マッピング

キーを送信する際に衝突が発生しないようにするには、最も効果的な方法は何ですか?

private void textBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch(e.KeyCode) 
     { 
      case Keys.E: 
       e.SuppressKeyPress = true; 
       SendKeys.Send("F".ToLowerInvariant()); 
       break; 
      case Keys.F: 
       e.SuppressKeyPress = true; 
       SendKeys.Send("E".ToLowerInvariant()); 
       break;    
     } 
    } 

上記の方法で試してみましたが、クラッシュして別の文字を送信してしまいます。

+0

「key = 'T''だけではないのはなぜですか? –

+0

@ MathiasR.Jessen現在、そのように動作していますが、実際にセットレターを出力する方法はありますか?私はasciiがこの問題を解決すると思った。 Fをタイプすると、それをTとして記録しますが、Fを出力します。 – Jed5931

+0

*何が* Fが正確に出力されますか?どのイベントを処理していますか?あなたは 'key 'をどのように割り当てますか? [最小、完全、かつ、検証可能な例](http://stackoverflow.com/help/mcve) –

答えて

1

KeyDown/KeyUpイベントではなく、KeyPressイベントを使用してください。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    switch (e.KeyChar.ToString().ToUpper()) 
    { 
     case "E": 
      e.KeyChar = 'f'; 
      break; 
     case "F": 
      e.KeyChar = 'e'; 
      break; 
    } 
} 
+0

LowerInvariantまたはUpperで作業することはできますか?この方法では、小文字の場合をさらに作成する必要はありません – Jed5931

+0

それはそのままで動作するはずです。 –

関連する問題