代码之家  ›  专栏  ›  技术社区  ›  user1372430

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

  •  3
  • user1372430  · 技术社区  · 6 年前

    在用户控件中,我使用webbrowser元素作为富文本编辑器。按下时 Ctrl+F 将显示winform,您可以键入搜索。但并非每个用户都知道 Ctrl+F 进行搜索。因此,我在toolStrip菜单中添加了一个用于搜索的图标。但我不知道我在 SearchButton_Click 事件显示搜索表单,就像单击了一样 Ctrl+F .

    2 回复  |  直到 6 年前
        1
  •  3
  •   Simon Mourier    6 年前

    您可以发送 commands 使用 IOleCommandTarget . 应该等于 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);
    }
    
        2
  •  3
  •   Reza Aghaei    6 年前

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

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