我在Form
对象的OnKeyDown
中收到了一次击键。当满足某些条件时(例如击键是可打印的字符而不是热键)我想将键转发到表单上的文本控件并将焦点设置为文本控件,以便用户可以继续键入。我能够解码使用MapVirtualKey
键入的字符,但我只得到“未移位”字符(总是大写字母)。使用ToUnicodeEx
似乎太过于PITA了。
最好的方法是什么?有没有办法简单地转发Windows消息本身?
我无法拦截ProcessKeyPreview
或其他类似内容并将其转发给文本控件的ProcessKeyPreview
吗?有类似思路的想法吗?
凹凸:没有答案!
答案 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;
}
}