使用浏览器通过用户控件中的按钮搜索“Ctrl+F”

Using browser search `Ctrl+F` through a button in user control

在我的用户控件中,我使用 webbrowser 元素作为富文本编辑器。当按下 Ctrl+F 时,会显示一个 winform,您可以输入搜索。但是每个用户可能都不知道 Ctrl+F 进行搜索。因此,我添加了一个用于搜索 toolStrip 菜单的图标。但我不知道我在 SearchButton_Click 事件中编写了什么代码来显示搜索表单,就好像单击了 Ctrl+F

您可以发送 commands to the hosted web control using the IOleCommandTarget. It's supposed to be equivalent to HtmlDocument.ExecCommand 方法,但由于某些原因,某些命令在后面不起作用。

您要执行的命令是 IDM_FIND

这里是 运行 它的一些 C# 代码:

private void SearchButton_Click(object sender, EventArgs e)
{
    dynamic ax = webBrowser1.ActiveXInstance;

    // IHtmlDocument2 also implements IOleCommandTarget
    var qi = (IOleCommandTarget)ax.Document;

    // MSHTML commands group
    var CGID_MSHTML = new Guid("de4ba900-59ca-11cf-9592-444553540000");
    const int IDM_FIND = 67;
    qi.Exec(CGID_MSHTML, IDM_FIND, 0, null, null);
}

[Guid("b722bccb-4e68-101b-a2bc-00aa00404770"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleCommandTarget
{
    void NotDefinedHere(); // don't remove this

    [PreserveSig]
    int Exec([MarshalAs(UnmanagedType.LPStruct)] Guid pguidCmdGroup, int nCmdID, int nCmdexecopt, object pvaIn, [In, Out] object pvaOut);
}

作为另一个简单的选项,您只需将 Ctrl+F 发送到 WebBrowser:

private void findToolStripButton_Click(object sender, EventArgs e)
{
    webBrowser1.Focus();
    SendKeys.Send("^f");
}