Как я могу заставить WebBroser не блокировать ключ - PullRequest
0 голосов
/ 08 февраля 2020

Это несколько воспроизводимо: в приведенном ниже коде у меня есть форма с 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);
    }
}
...