有人知道如何在 WinForms 应用程序中单击 WebBrowser 控件中的链接,然后在我的 TabControl 中的新选项卡中打开该链接吗?
我已经搜索了几个月,看过很多教程/文章/代码示例,但似乎以前没有人在 C# 中尝试过这个。
非常感谢任何建议/ sample 。
谢谢。
最佳答案
根据您的评论,我了解到您想要捕获 WebBrowser 控件的“在新窗口中打开”操作,并覆盖默认行为以改为在应用程序内的新选项卡中打开。
要可靠地完成此操作,您需要获取 NewWindow2 事件,该事件公开 ppDisp(指向应打开新窗口的 WebBrowser 控件的可设置指针)。 所有其他潜在的组合解决方案(例如获取用户在 OpenWindow 事件之前选择的最后一个链接)都不是最优的,并且在极端情况下必然会失败。
幸运的是,有一种(相对)简单的方法可以完成此操作,同时仍然使用 System.Windows.Forms.WebBrowser 控件作为基础。您需要做的就是扩展 WebBrowser 并拦截 NewWindow2 事件,同时提供对 ActiveX 实例的公共(public)访问(用于在新选项卡中传递到 ppDisp)。以前有人这样做过,Mauricio Rojas 有一个很好的例子,它有一个完整的工作类“ExtendedWebBrowser”:
一旦您有了 ExtendedWebBrowser 类,您需要做的就是为 NewWindow2 设置处理程序并将 ppDisp 指向新选项卡中的浏览器。这是我放在一起的一个例子:
private void InitializeBrowserEvents(ExtendedWebBrowser SourceBrowser)
{
SourceBrowser.NewWindow2 += new EventHandler<NewWindow2EventArgs>(SourceBrowser_NewWindow2);
}
void SourceBrowser_NewWindow2(object sender, NewWindow2EventArgs e)
{
TabPage NewTabPage = new TabPage()
{
Text = "Loading..."
};
ExtendedWebBrowser NewTabBrowser = new ExtendedWebBrowser()
{
Parent = NewTabPage,
Dock = DockStyle.Fill,
Tag = NewTabPage
};
e.PPDisp = NewTabBrowser.Application;
InitializeBrowserEvents(NewTabBrowser);
Tabs.TabPages.Add(NewTabPage);
Tabs.SelectedTab = NewTabPage;
}
private void Form1_Load(object sender, EventArgs e)
{
InitializeBrowserEvents(InitialTabBrowser);
}
(假设 TabControl 名为“Tabs”,初始选项卡包含停靠在名为“InitialWebBrowser”的 ExtendedWebBrowser 的子控件)
不要忘记在标签页关闭时注销事件!
关于c# - 在新 TAB 中打开链接(WebBrowser 控件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1286746/