2009-04-17 5 views
0

FormオブジェクトのOnKeyDownにキーストロークを受信して​​います。いくつかの条件が満たされたとき(キーストロークが印刷可能な文字であり、ホットキーでないなど)、フォームのテキストコントロールにキーを転送し、テキストコントロールにフォーカスを設定して、ユーザーが入力を続けるようにします。私はMapVirtualKeyを使用して入力された文字をデコードすることができますが、 "unshifted"文字(常に大文字)のみを取得します。 ToUnicodeExを使用すると、あまりにも多くのPITAのように思えます。WinFormsの別のコントロールにキーストロークを転送する

これを行うにはどのような方法が最適ですか?単にWindowsメッセージ自体を転送する方法はありませんか?

ProcessKeyPreviewなどを横取りして、テキストコントロールのProcessKeyPreviewに転送することはできませんか?同様の行に沿ったアイデアですか?

バンプ:回答がありません!

答えて

1

私は、次の

private void MyFunkyForm_KeyDown(object sender, KeyEventArgs e) 
{ 
    // to avoid duplicate letters in textbox :-) 
    if (textBox2.Focused == false) 
    { 

     // get the char from the Keycode 
     char inputChar = (char)e.KeyCode; 
     if (char.IsLetterOrDigit(inputChar)) 
     { 
      // if letter or number then add it to the textbox 
      textBox2.Text += inputChar; 
     } 

     // set focus 
     textBox2.Focus(); 
     // set cursor to the end of text, no selection 
     textBox2.SelectionStart = textBox2.Text.Length; 
    } 
} 
で単一のフォームにこれをしませんでした
関連する問題