将击键转发到WinForms中的另一个控件

时间:2009-04-17 12:31:07

标签: winforms winapi keyboard

我在Form对象的OnKeyDown中收到了一次击键。当满足某些条件时(例如击键是可打印的字符而不是热键)我想将键转发到表单上的文本控件并将焦点设置为文本控件,以便用户可以继续键入。我能够解码使用MapVirtualKey键入的字符,但我只得到“未移位”字符(总是大写字母)。使用ToUnicodeEx似乎太过于PITA了。

最好的方法是什么?有没有办法简单地转发Windows消息本身?

我无法拦截ProcessKeyPreview或其他类似内容并将其转发给文本控件的ProcessKeyPreview吗?有类似思路的想法吗?

凹凸:没有答案!

1 个答案:

答案 0 :(得分: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;
    }
}