2012-05-16 71 views
8

這可能會遇到的令人難以置信的愚蠢,但我想不通,如果:C#Web瀏覽器控件塊父母的Load事件

  • 我是一個白癡
  • 我誤解的東西
  • 的MS Web瀏覽器控制被竊聽

我更喜歡認爲它是後者。

我在WinForms用戶控件中有一個Web瀏覽器控件。它在設計時被添加到控件中,理論上在控件的Load事件中,它應該導航到Google。

似乎很簡單。

但是,

public partial class TVHost : UserControl 
{ 
    public TVHost() 
    { 
     InitializeComponent(); 
    } 

    private void TVHost_Load(object sender, EventArgs e) 
    {  
     webBrowser1.Navigate("http://google.co.uk"); 
    } 
} 

這不起作用。沒有錯誤,只是沒有。插入斷點/調試行顯示我Load事件甚至不被調用。

我現在決定檢查在Designer.cs文件中正確設置了Load事件。

this.Load += new System.EventHandler(this.TVHost_Load); 

似乎合法。

如果我從窗體中刪除Web瀏覽器控件,則會觸發加載事件。

我不明白這一點,一個控件如何能夠防止一開始就使用它的方法?

移動的,我發現這一點: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d6e427b2-9cc9-4318-bb05-11363025e3f7/

TL; DR是該鏈接如下:「如果你有被設置爲可見形式於網絡瀏覽器加載行不通=真正的」

所以很確定,如果我將web瀏覽器的默認可見性更改爲false,則會觸發控件的加載事件。我可以通過在加載事件中設置瀏覽器的可見性來解決該問題。

private void TVHost_Load(object sender, EventArgs e) 
{ 
    webBrowser1.Visible = true; 
    webBrowser1.Navigate("http://google.co.uk"); 
} 

很奇怪。

雖然這個「修復」的作品,我覺得它非常hacky,並想知道是否有任何人對此行爲的解釋?

令人驚訝的是,我發現在MS連接這個bug,從2005年遺留下來的 - http://connect.microsoft.com/VisualStudio/feedback/details/116535/when-adding-a-webbrowser-control-to-a-user-control-the-load-will-not-fire#

+0

看看這個http://stackoverflow.com/questions/2220483/usercontrol-load-event-not-fired – V4Vendetta

+0

試過@ V4Vendetta,也沒有工作。不管怎麼說,還是要謝謝你。 – KingCronus

+0

多一點谷歌搜索導致我發現這個錯誤的許多參考,我沒有看到比我目前設置爲隱形的第一個更好的修復。 * sadface * – KingCronus

回答

3

Connect bug討論您鏈接到:

現在,如果你想獲得的負載要觸發的事件,可以在屬性網格中設置WebBrowser控件的URL屬性。 URL可以是任何你想要的,甚至可以是:如果你不想讓它以加載的頁面開始,則爲空。

所以,如果你去到設計師和WebBrowserUrl屬性設置爲字符串about:blank(它告訴WebBrowser加載一個空白頁),那麼你的用戶控件應該開始再次得到它Load事件。

+0

非常感謝,關於:空白做的伎倆。 – KingCronus