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);
        }
第一次点“取消”,对话框消失
第二次得点两次“取消”,对话框才能消失
第三次得点三次“取消”,对话框才能消失
以此类推。。怎么解决哈,

解决方案 »

  1.   

    this.Close();
    Application.Exit();
      

  2.   

    if (btnExitElement != null)
    换成:
    if (btnExitElement == null)
    试试.
      

  3.   

                if (btnExitElement != null)
                {
                    btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
                }
    --------------------------------
    这段代码被重复执行,同一个事件处理方法被多次附加,从而在事件发生时被多次调用执行。
    解决方法就是判断一下,如果此方法已经被附加,下次就不必再附加了。
      

  4.   

    在你的任何关闭按钮里,都只写上this.close()
    只在主窗体的closing事件里写上Application.Exit()
      

  5.   

    不好意思, 上面的不对. 我刚看错了.
    我觉得原因应该是:
    你在DocumentCompleted中调用了login, 每次调用Login时都注册了一次HtmlElementEventHandler事件, 但你多次调用DocumentCompleted时, 就多注册一次HtmlElementEventHandler事件. 所以会产生这个问题. 
      

  6.   

    void btnExitElement_Click(object sender, HtmlElementEventArgs e)
    {
      if (ComfirmExit() == DialogResult.OK)
         Application.Exit();   //试试这个行不行: 当btnExitElement_Click事件被激活并执行后就立即移除该按钮的单击事件
      btnExitElement.Click -= new HtmlElementEventHandler(btnExitElement_Click);}
      

  7.   


    如果webBrowser里的页面不执行button事件没事儿,相反,就会执行两次
      

  8.   

    你的这个事件注册写在click里面是不对的,click一次就注册一次吗写在loading里面吧
    或者是构造函数
      

  9.   

    bool m_AddEvent = false;
    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;
                }
            }
    不要添加这么多次事件啊
      

  10.   

    如果webBrowser里的页面不执行button事件没事儿,相反,就不会执行了
      

  11.   


    正解.
    btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
    执行多次造成的
      

  12.   

    不知道其他代码,也不好说什么。就我能够看到的来说,可以在类的定义中加一个标志变量Added,初始为false,然后            if (btnExitElement != null && !Added)
                {
                    btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
                    Added=true;
                }这样就能够控制重复附加事件处理方法所导致的问题了。
      

  13.   


                if (btnExitElement != null)
                {
                    btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
                }改为:
                if (btnExitElement != null && btnExitElement.Click != null)
                {
                    btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
                }
      

  14.   

    框架网页会有多个文档,所以就会产生多个事件了,用e.URL是否等主文档的URL就可以判断是不是主网页下载完成了
      

  15.   

        我以前也遇到过这问题,就是每次运行到
    btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
    绑定一次btnExitElement_Click,
    所以事件一次一次增加。
        把btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
    放到我把它放到构造函数里问题就解决了!!
      

  16.   

    先注销,然后再注册:if (btnExitElement != null)
    {
        btnExitElement.Click -= new HtmlElementEventHandler(btnExitElement_Click);
        btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);
    }
      

  17.   

     if (btnExitElement != null)
                {
                    btnExitElement.Click += new EventHandler(delegate(object theSender, EventArgs ea)
                {
                    btnExitElement_Click((null, null);
                });            }
      

  18.   


    if (btnExitElement != null)
    {
        btnExitElement.Click += new EventHandler(delegate(object theSender, EventArgs ea)
        {
            btnExitElement_Click(null, null);
        });
    }
      

  19.   

    在这儿就是委托了个事件 ,呵呵,没仔细看你的代码
    if (btnExitElement != null) 

        btnExitElement.Click += new EventHandler(delegate(object theSender, EventArgs ea) 
        { 
            if (ComfirmExit() == DialogResult.OK)
                    Application.Exit();
        }); 
    }呵呵,也许这样就可以了
      

  20.   

     呵呵,我也遇到同样的问题了,刚才百度一下,发现你的帖子。看了楼上大侠们的评论,我有启发。其实超级简单
    我是这样解决的。点击按钮的时候,每次点击的时候就先为事件赋值为null,然后在在讲真正的委托对象赋值给事件。
    -------------------------------------------------------------------------------
    btnExitElement =null;
    btnExitElement.Click += new HtmlElementEventHandler(btnExitElement_Click);