当页面为新窗口弹出时,下面代码分别演示如何在新建form中加载页面以及当前form的web控件加载form。
SHDocVw微软的一个系统文件,文件路径:C:\WINDOWS\system32\shdocvw.dll。
使用要引用这个dll
1、新建form,这个大多数人都应该知道。用newwindow2就可以了,不过vs2005的web控件是ms封装过的,需要注意一下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace WindowsApplication24
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.webBrowser1.Navigate("about:blank");
(this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(Form1_NewWindow2);
}
private void button1_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate("www.google.cn");
}
void Form1_NewWindow2(ref object ppDisp, ref bool Cancel)
{
Form1 frm = new Form1();
ppDisp = frm.webBrowser1.ActiveXInstance;
frm.Show();
}
}
}
2、在当前窗体的web控件中直接加载,这个需要用到NewWindow3 事件。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace WindowsApplication24
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.webBrowser1.Navigate("about:blank");
(this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Form1_NewWindow3);
}
void Form1_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
{
Cancel = true;
this.webBrowser1.Navigate(bstrUrl);
}
private void button1_Click(object sender, EventArgs e)
{
this.webBrowser1.Navigate("www.google.cn");
}
}
}
找找看,不要直接使用WebBrowser,得使用比WebBrowser低级一点的:COM组件 Microsoft Web 浏览器
4、新窗口打开的连接用自己定义的窗体打开
private void webBrowserContent_NewWindow(object sender, CancelEventArgs e)
{
ContentPage cp = new ContentPage();//新建一个窗体来打开
cp.Show();
cp.ActiveUrl = this.webBrowserContent.StatusText;//新建窗体的一个自定义属性值,来设置url,具体该怎么设置LZ自己灵活处理,这只是我的用法
e.Cancel = true;
}
5、解决点击webbrowser里面的链接会在本地IE中显示新网页的NewWindow事件代码(站内连接)
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
if (webBrowser1.Document.ActiveElement != null)
{
webBrowser1.Navigate(webBrowser1.Document.ActiveElement.GetAttribute("href"));
comboBox1.Text = webBrowser1.Document.ActiveElement.GetAttribute("href");
}
}