none
为什么我用DocumentCompleted会出现打开两个同样的新Winform窗口? RRS feed

  • 问题

  • 部分Code如下:
    ..........
    private void FormParent_Load(object sender, EventArgs e)
            {
               
                webBrowser_1.Navigate("about:blank");
               
                webBrowser_1.Navigate(Application.StartupPath + @"\html\index.html");
                
               webBrowser_1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_1_DocumentCompleted);
            }

            private void webBrowser_1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                HtmlDocument htmlDOC = webBrowser_1.Document;
                HtmlElement htmlElement = htmlDOC.All["btnOpenWinForm"];
               
                if (htmlElement != null)
                {
                    htmlElement.Click += new HtmlElementEventHandler(product_Click);
                }
            }
     private void product_Click(object sender, EventArgs e)
            {
                product gChild = new product();
                gChild.Show();
            }
    ........................

    2009年11月26日 5:59

答案

  • 你好!
         你检查一下是否订阅了两次Click事件,你这行代码已经订阅了一次了:
    htmlElement.Click += new HtmlElementEventHandler(product_Click);
         你看看代码的其他地方是否也订阅了这个HTMLElement的Click事件
    周雪峰
    2009年11月26日 9:05
    版主
  • 你好!

    两种情况都可能产生这样的情况,查看你的程序是否存在相关问题。

    1 事件注册了两次。
    2 事件触发了两次。

    知识改变命运,奋斗成就人生!
    2009年11月26日 9:09
    版主
  • DocumentCompleted每个框架都会触发一次

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年11月26日 16:08
    版主
  • 你说的是对的,
    只要去掉:
    private void FormParent_Load(object sender, EventArgs e)
            {
               
                webBrowser_1.Navigate("about:blank");
               
                webBrowser_1.Navigate(Application.StartupPath + @"\html\index.html");
                
               webBrowser_1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_1_DocumentCompleted);
            }
    这当中的webBrowser_1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_1_DocumentCompleted);就可以了。
    谢谢!同时也感谢其它2位版主的热心回答!
    2009年11月27日 8:05

全部回复

  • 你好!
         你检查一下是否订阅了两次Click事件,你这行代码已经订阅了一次了:
    htmlElement.Click += new HtmlElementEventHandler(product_Click);
         你看看代码的其他地方是否也订阅了这个HTMLElement的Click事件
    周雪峰
    2009年11月26日 9:05
    版主
  • 你好!

    两种情况都可能产生这样的情况,查看你的程序是否存在相关问题。

    1 事件注册了两次。
    2 事件触发了两次。

    知识改变命运,奋斗成就人生!
    2009年11月26日 9:09
    版主
  • DocumentCompleted每个框架都会触发一次

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年11月26日 16:08
    版主
  • 你说的是对的,
    只要去掉:
    private void FormParent_Load(object sender, EventArgs e)
            {
               
                webBrowser_1.Navigate("about:blank");
               
                webBrowser_1.Navigate(Application.StartupPath + @"\html\index.html");
                
               webBrowser_1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_1_DocumentCompleted);
            }
    这当中的webBrowser_1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_1_DocumentCompleted);就可以了。
    谢谢!同时也感谢其它2位版主的热心回答!
    2009年11月27日 8:05