Это довольно сложно сделать, сообщение WM_KEYDOWN, которое отправляет Windows, уже зафиксировано в окне, которое имеет фокус.Вы не хотите заняться трансляцией событий нажатия клавиш в печатные символы, это ракетостроение раскладок клавиатуры с мертвыми клавишами, которые производят только взрывающиеся ракеты.
Одна вещь, которую выможет сделать это повторно опубликовать сообщение клавиатуры, теперь с дескриптором окна текстового поля.Вы можете сделать это, переопределив метод ProcessCmdKey () формы, чтобы обнаружить нажатие клавиши и вернуть true, чтобы предотвратить его дальнейшую обработку.Как это:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (!textBox1.Focused) {
PostMessage(textBox1.Handle, msg.Msg, msg.WParam, msg.LParam);
textBox1.Focus();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);