我没学过C#,之前只学过一点Java,最近想编个网页自动注册的程序,遇到的问题如下:我想建三个webbrowser对象,访问三个网页,但是发生这一事件处理的方法我采用同一个wb_DocumentComplete方法
然后都用wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);我会在wb_DocumentCompleted方法中,通过引发对象的不同,针对不同的引发对象进行不同的处理。问题是 我怎么在发生documentComplete这一事件时,知道是哪个webbrowser引发了这一事件呢?
然后都用wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);我会在wb_DocumentCompleted方法中,通过引发对象的不同,针对不同的引发对象进行不同的处理。问题是 我怎么在发生documentComplete这一事件时,知道是哪个webbrowser引发了这一事件呢?
Object sender,
WebBrowserDocumentCompletedEventArgs e
)sender啊
public void mailReg(WebBrowser wb,ref Boolean bl)
{
intLoadingIndex = 0;
if (wb.Name == webBrowser1.Name) bl = blCanStart1;
if (wb.Name == webBrowser2.Name) bl = blCanStart2;
if (wb.Name == webBrowser3.Name) bl = blCanStart3;
if (wb.Name == webBrowser4.Name) bl = blCanStart4;
if (bl == true)
{
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
wb.ScriptErrorsSuppressed = true;
wb.Navigate(strRegurl);
bl = false;
}
else return;
}我会在wb_DocumentCompleted方法中,通过引发对象的不同,针对不同的引发对象进行不同的处理。问题是 我怎么在发生documentComplete这一事件时,知道是哪个webbrowser引发了这一事件呢?
{
if (sender.ToString() == webBrowser1.Name) lbxReg.Items.Add(sender.ToString()); else lbxReg.Items.Add(webBrowser1.ReadyState);
}
我这里输出的sender是空的,这边我应该用public delegate void 而不是private void 吗?
// <summary>
/// 浏览器加载完毕
/// </summary>
/// <param name="_webBrowser"></param>
public void webBrowserComplete(WebBrowser _webBrowser)
{
while (_webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
System.Threading.Thread.Sleep(100);
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser wbSender= sender as WebBrowser;
if (wbSender.Name == webBrowser1.Name) tbxDebug.Text = "True"; else tbxDebug.Text = "False";//输出True.
}
多谢二楼的提醒!