Это несколько воспроизводимо: в приведенном ниже коде у меня есть форма с TextBox и WebBrowser, и я обрабатываю нажатия клавиш, переопределяющие ProcessCmdKey.
Когда фокус находится в TextBox, все работает нормально.
Но когда фокус находится в веб-браузере, если вы несколько раз нажимаете клавишу F1, захватывается только первое нажатие (особенно если вы чередуете фокус между элементами управления).
Одна странная вещь: когда элемент управления заблокирован, если Вы нажимаете A, а затем F1, все возвращается в нормальное состояние.
Это, вероятно, ошибка, поскольку в качестве обходного пути я обрабатывал KeyDown непосредственно в WebBrowser.
Есть ли лучший обходной путь? Я делаю что-то неправильно? Следует ли избегать переопределения ProcessCmdKey?
public class WebBrowserForm : Form
{
WebBrowser wb1;
TextBox textBox1;
public WebBrowserForm()
{
textBox1 = new TextBox();
textBox1.Dock = DockStyle.Top;
wb1 = new WebBrowser();
wb1.WebBrowserShortcutsEnabled = false;
wb1.Dock = DockStyle.Fill;
Controls.Add(wb1);
Controls.Add(textBox1);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.F1)
{
wb1.DocumentText ="F1 pressed: "+ DateTime.Now.Millisecond.ToString();
return true;
}
else if(keyData == Keys.A)
{
wb1.DocumentText = "A pressed: " + DateTime.Now.Millisecond.ToString();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}