【问题标题】:Handle Tab Key Press on WebBrowser Control and Prevent Switching between Html Elements处理 WebBrowser 控件上的 Tab 键按下并防止在 Html 元素之间切换
【发布时间】:2023-03-21 22:26:01
【问题描述】:

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

【问题讨论】:

  • @RezaAghaei 取消 Tab 元素切换(当您按下 Tab 时,您在页面上的文本之间切换)。我知道有很多方法可以做这类事情,但我正在处理一个只有 Flash 游戏的页面,并且由于某种原因,它不断在不存在的元素之间切换。通过使用, Ctrl + Tab 我总是可以使用我想要的Flash游戏的功能。对困惑感到抱歉。我真的很想做我在这个问题上所说的话......对不起我的英语,我说葡萄牙语。

标签: c# winforms webbrowser-control


【解决方案1】:

您可以处理WebBrowser.Document.BodyKeyDown 事件并检查向下键是否为Tab 阻止默认操作设置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;

【讨论】:

  • 非常感谢,伙计!很好的答案!
  • 我很抱歉@RezaAghaei,但你能帮我解决一下你给出的这个答案吗,我需要将 Tab 输入转换为 Ctrl Tab 只有当我将布尔值设置为 false 时,可以你帮我?我有这样的事情:private void webBrowser1_PreviewKeyDown_1(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Tab) { toggle = !toggle; } } 我想让 Tab 像 Ctrl + Tab 一样只有当我将切换设置为 false 时,我该怎么做?
  • @DavidAmaral 你可以简单地使用SendKeys.Send("^({TAB})");发送一个Ctrl + Tab。
  • 你的意思是这样的吗? if(e.KeyPressedCode==(int)Keys.Tab) && !CtrlKeyPressed && !toggle) { SendKeys.Send("^({TAB})"); e.ReturnValue = false;}
猜你喜欢
  • 1970-01-01
  • 2018-06-13
  • 2021-03-14
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多