private void login()
{
HtmlDocument htmlDoc = webBrowser1.Document;
//----------------退出响应
HtmlElement btnExitElement = htmlDoc.All["aexit1"];
if (btnExitElement != null)
{
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.login();
//webBrowser1.Document.Window.Unload += new HtmlElementEventHandler(Window_Unload);
}
void btnExitElement_Click(object sender, HtmlElementEventArgs e)
{
if (ComfirmExit() == DialogResult.OK)
Application.Exit();
//webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
第一次点“取消”,对话框消失
第二次得点两次“取消”,对话框才能消失
第三次得点三次“取消”,对话框才能消失
以此类推。。怎么解决哈,
{
HtmlDocument htmlDoc = webBrowser1.Document;
//----------------退出响应
HtmlElement btnExitElement = htmlDoc.All["aexit1"];
if (btnExitElement != null)
{
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.login();
//webBrowser1.Document.Window.Unload += new HtmlElementEventHandler(Window_Unload);
}
void btnExitElement_Click(object sender, HtmlElementEventArgs e)
{
if (ComfirmExit() == DialogResult.OK)
Application.Exit();
//webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
第一次点“取消”,对话框消失
第二次得点两次“取消”,对话框才能消失
第三次得点三次“取消”,对话框才能消失
以此类推。。怎么解决哈,
Application.Exit();
换成:
if (btnExitElement == null)
试试.
{
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
}
--------------------------------
这段代码被重复执行,同一个事件处理方法被多次附加,从而在事件发生时被多次调用执行。
解决方法就是判断一下,如果此方法已经被附加,下次就不必再附加了。
只在主窗体的closing事件里写上Application.Exit()
我觉得原因应该是:
你在DocumentCompleted中调用了login, 每次调用Login时都注册了一次HtmlElementEventHandler事件, 但你多次调用DocumentCompleted时, 就多注册一次HtmlElementEventHandler事件. 所以会产生这个问题.
{
if (ComfirmExit() == DialogResult.OK)
Application.Exit(); //试试这个行不行: 当btnExitElement_Click事件被激活并执行后就立即移除该按钮的单击事件
btnExitElement.Click -= new HtmlElementEventHandler(btnExitElement_Click);}
如果webBrowser里的页面不执行button事件没事儿,相反,就会执行两次
或者是构造函数
private void login()
{
HtmlDocument htmlDoc = webBrowser1.Document;
//----------------退出响应
HtmlElement btnExitElement = htmlDoc.All["aexit1"];
if (btnExitElement != null && !m_AddEvent)
{
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
m_AddEvent=true;
}
}
不要添加这么多次事件啊
正解.
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
执行多次造成的
{
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
Added=true;
}这样就能够控制重复附加事件处理方法所导致的问题了。
if (btnExitElement != null)
{
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
}改为:
if (btnExitElement != null && btnExitElement.Click != null)
{
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
}
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
绑定一次btnExitElement_Click,
所以事件一次一次增加。
把btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
放到我把它放到构造函数里问题就解决了!!
{
btnExitElement.Click -= new HtmlElementEventHandler(btnExitElement_Click);
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
}
{
btnExitElement.Click += new EventHandler(delegate(object theSender, EventArgs ea)
{
btnExitElement_Click((null, null);
}); }
if (btnExitElement != null)
{
btnExitElement.Click += new EventHandler(delegate(object theSender, EventArgs ea)
{
btnExitElement_Click(null, null);
});
}
if (btnExitElement != null)
{
btnExitElement.Click += new EventHandler(delegate(object theSender, EventArgs ea)
{
if (ComfirmExit() == DialogResult.OK)
Application.Exit();
});
}呵呵,也许这样就可以了
我是这样解决的。点击按钮的时候,每次点击的时候就先为事件赋值为null,然后在在讲真正的委托对象赋值给事件。
-------------------------------------------------------------------------------
btnExitElement =null;
btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);