使用浏览器通过用户控件中的按钮搜索“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");
}
在我的用户控件中,我使用 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");
}