我在一个窗体form2中添加了一个webBrowser控件,其中构造函数代码如下:public partial class browser : Form
{
public browser(string type,string url,string uid,string pwd)
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;//居中
webBrowser1.Navigate(url);
//MessageBox.Show("1");//如果不注释这句话就没有异常
try
{
HtmlElement element = webBrowser1.Document.GetElementById("LoginName");//这里会有异常
element.InnerText = uid;
element = webBrowser1.Document.GetElementById("password");
element.InnerText = pwd;
webBrowser1.Document.GetElementById("log_in").InvokeMember("Click");
}catch(Exception e)
{
MessageBox.Show(e.ToString());
}
}
然后我在form1窗体调用它,也就是在form1中点击按钮后就弹出webBrowser,代码如下: private void btwebmail_Click(object sender, EventArgs e)
{
browser webm = new browser("webmail", "http://webmail.stu.edu.cn", tbusername.Text, tbpwd.Text);
webm.Show();
}
结果是,如果我注释掉第一段代码中的“MessageBox.Show("1");”语句后,会产生以下异常:
---------------------------System.NullReferenceException: 未将对象引用设置到对象的实例。 在 autologin.browser..ctor(String type, String url, String uid, String pwd) 位置 D:\Backup\我的文档\Visual Studio 2008\Projects\autologin\browser.cs:行号 30
---------------------------为什么会这样子呢?我已经new了browser呀,怎么还会有异常,而且如果加上“MessageBox.Show("1");”就没有异常了。
请高手指教,谢谢!
{
public browser(string type,string url,string uid,string pwd)
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;//居中
webBrowser1.Navigate(url);
//MessageBox.Show("1");//如果不注释这句话就没有异常
try
{
HtmlElement element = webBrowser1.Document.GetElementById("LoginName");//这里会有异常
element.InnerText = uid;
element = webBrowser1.Document.GetElementById("password");
element.InnerText = pwd;
webBrowser1.Document.GetElementById("log_in").InvokeMember("Click");
}catch(Exception e)
{
MessageBox.Show(e.ToString());
}
}
然后我在form1窗体调用它,也就是在form1中点击按钮后就弹出webBrowser,代码如下: private void btwebmail_Click(object sender, EventArgs e)
{
browser webm = new browser("webmail", "http://webmail.stu.edu.cn", tbusername.Text, tbpwd.Text);
webm.Show();
}
结果是,如果我注释掉第一段代码中的“MessageBox.Show("1");”语句后,会产生以下异常:
---------------------------System.NullReferenceException: 未将对象引用设置到对象的实例。 在 autologin.browser..ctor(String type, String url, String uid, String pwd) 位置 D:\Backup\我的文档\Visual Studio 2008\Projects\autologin\browser.cs:行号 30
---------------------------为什么会这样子呢?我已经new了browser呀,怎么还会有异常,而且如果加上“MessageBox.Show("1");”就没有异常了。
请高手指教,谢谢!
解决方案 »
- c# 退出时加一个确认窗口(为什么 e.Cancel=true 不让用呢)
- 请教一个语法问题,怎么是this,如何使用的?
- 如何repeater里面用bool类型来让图片显示或不显示,来顶就有分拿
- serialPort1.ReadExisting()接收到亂碼數據
- vs2008 c# 如何查看类库的源码?
- 请问如何通过IE的句柄来得到IWebBrowser2接口?
- 关于数据连接的问题
- C#开发 Oracle绑定datagrid能显示,调用Adapter更新提示表不存在?
- 如何在VB.Net中使用C#写的类?
- 我发现了一个GNU的C#的编译器,SharpDevelop.exe,但不能用好像我缺一个名为mscoree.dll的东东
- WeifenLuo.WinFormsUI.Docking使用问题
- 数据库备份
这种办法是网络延迟造成的,得用DocumentCompleted事件可以解决这个问题
DocumentCompleted是当WebBrowser控件全部加载完文档后发生,你的代码可以加在这个事件里
//声明一个全局变量(网页是否加载完成)
bool isLoad=false;
//在DocumentCompleted事件中:
webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
isLoad=true;
}在按钮事件中:
private void btwebmail_Click(object sender, EventArgs e)
{
if(!isLoad)
{
return;
MessageBox.Show("页面正在加载中,请稍候在试!");
return;
}
browser webm = new browser("webmail", "http://webmail.stu.edu.cn", tbusername.Text, tbpwd.Text);
webm.Show();
}
载入是否成功
while (webBrowser1.IsBusy) Application.DoEvents(); private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete) return;
}
string LastUrl;
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete || webBrowser1.Url.ToString() == LastUrl) return;
LastUrl = webBrowser1.Url.ToString();
}