2010-06-28 16 views
1

由於您只能在文檔加載完成後才能分配它,並且每次文檔加載時都不需要分配它,難道我沒有別的選擇,只能做這種事嗎?在C#中爲HtmlDocument.MouseDown分配事件處理程序的正確方法?

private void WebBrowser_DocumentCompleted(object sender, 
    WebBrowserDocumentCompletedEventArgs e) 
{ 
    if (!mouseDownAssigned) // mouseDownAssigned is a bool with start value false 
    { 
     mouseDownAssigned = true; 
     this.Document.MouseDown += 
      new HtmlElementEventHandler(Document_MouseDown); 
    } 
} 

這是一個有點醜陋,不優雅。有一種感覺,這不是微軟想到的。

+0

對我來說並不壞。你認爲什麼類型的代碼更「優雅」? – 2010-06-28 16:37:48

+0

我有同樣的問題......我不得不找另一種方法去做我想做的事,你想做什麼? – Luiscencio 2010-06-28 16:55:52

回答

0

我覺得這是最接近的優雅的解決方案:

public MyWebBrowser() 
    { 
     InitializeComponent(); 
     this.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentCompleted); 
     this.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentFirstCompleted); 
    } 

    private void SuperWebBrowser_DocumentFirstCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     this.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(SuperWebBrowser_DocumentFirstCompleted); 
     this.Document.MouseDown += new HtmlElementEventHandler(Document_MouseDown); 
    } 

    private void SuperWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
    } 

這樣,我並不需要每一個文件完成時檢查變量。猜猜這是微軟的想法。

0

我不相信這是MS想到的。如果我不得不猜測,這是因爲文檔和Web瀏覽器之間存在某種代理服務器,而事件處理服務只在加載第一個文檔時才初始化,而不是在加載控件時進行初始化。

相關問題