【问题标题】:WebBrowser Control TextInput eventsWebBrowser 控件 TextInput 事件
【发布时间】:2015-11-12 10:57:55
【问题描述】:

我正在努力使用WebBrowser 控件(在 Winforms 和 WPF 中)。基本上,我想实现与 RTF 编辑器相同的行为:处理某种 OnTextInput 事件,以便为每次击键获取最后输入的字符。

我指的是文本字符,而不是 Control、Alt、F5、Enter 等,它们可以通过 Keydown/Keyup 事件捕获。

有什么帮助吗?提前致谢。

【问题讨论】:

  • 内容从何而来?内容是否来自属于你的 html 文件?
  • 是的,我将 DesignMode 与 NavigateToString 结合使用以创建来自数据库的 HTML 文档。
  • 您希望如何处理已处理的关键事件?
  • 我正在实现一种“过滤器”,所以我需要知道正在输入的字符,以便在我拥有的另一个列表上应用过滤器。
  • 所以我想你会发现这个答案很有用。

标签: html .net wpf winforms webbrowser-control


【解决方案1】:

你可以处理this.webBrowser1.Document.BodyKeyPress事件:

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


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

void Body_KeyPress(object sender, HtmlElementEventArgs e)
{
    //handle the event, for example show a message box
    MessageBox.Show(((char)e.KeyPressedCode).ToString());
}

注意:

  • 它不会根据需要处理非输入键。
  • 如果需要,您还可以根据某些条件通过设置 e.ReturnValue = false; 来禁止输入。
  • 您还可以以同样的方式处理其他关键事件,例如 KeyUpKeyDown

【讨论】:

  • 感谢您的回答,但我不是很明白。这样,MessageBox 将只显示一半的时间,对吧?我想为每个按下的“文本”键编写一个过滤器,所以我不确定这是否合适。
  • 显示MessageBox 只是一个示例,您可以使用((char)e.KeyValue).ToString()。要点是使用PreviewKeyDown 您要求处理某种 OnTextInput 事件以获取每次击键的最后输入字符的事件。我认为该帖子回答了您的问题:)
  • 是的,但是这样它也会在 F1、F2、Fx...、Ctrl、Alt、Mayus、ArrowLeft、ArrowRight 等 .... 时触发。防止添加这些击键? WPF RichTextBox 控件已经提供了在这些情况下不会触发的 OnTextInput。
  • 检查更新,我认为编辑包含您要查找的内容。
  • @BorjaLópez 我测试了解决方案,它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2014-11-11
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多