c# - 处理 WebBrowser 控件上的 Tab 键按下并防止在 Html 元素之间切换

标签 c# winforms webbrowser-control

我正在开发一个 WebBrowser 控件应用程序,我需要处理 Tab 按键并防止在 html 元素之间切换。我不能使用 KeyDown 事件,因为 WebBrowser 控件不支持这些事件。所以看来我必须使用 PreviewKeyDown 或类似的东西。关于如何对此进行编程的任何想法?

最佳答案

你可以处理KeyDown WebBrowser.Document.Body的事件并检查下键是否为 Tab 防止默认操作 bu 设置 e.ReturnValue = false; 并执行所需的操作。

您可以使用 HtmlElementEventArgs了解按下的键和修饰键状态的属性。

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate("http://www.google.com");
    //Attach a handler to DocumentCompleted
    webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    //Attach a handler to Body.KeyDown when the document completed
    webBrowser1.Document.Body.KeyDown += Body_KeyDown;
}

void Body_KeyDown(object sender, HtmlElementEventArgs e)
{
    if(e.KeyPressedCode==(int)Keys.Tab)
        MessageBox.Show("Tab Handled");
    //Prevent defaut behaviour
    e.ReturnValue = false;
}

您还可以将上述代码限制为单个元素:

webBrowser1.Document.GetElementById("someid").KeyDown += Body_KeyDown;

关于c# - 处理 WebBrowser 控件上的 Tab 键按下并防止在 Html 元素之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39252444/

相关文章:

c# - 使用 JSON.net 反序列化 JSON 流

vb.net - 捕获安全警报事件

c# - 消息过滤器指示应用程序正忙,同时使用多个 web 浏览器控件

c# - 单击按钮后如何在数据网格中选中复选框的情况下传输数据? C# 和 SQL Server

c# - WinForms WebBrowser block 下载 c#

c# - lambda 表达式的异常

c# - 尝试从 ExpandoObject 获取动态属性时出现 "System.StackOverflowException"错误

c# - Excel INT等效

c# - 从 UserControl 传回信息

c# - 有没有一种简单的方法可以打印出我的点网 Windows 窗体?