C#Web Browser Control阻止父级的Load事件

Kin*_*nus 8 c# events webbrowser-control winforms

这可能会令人难以置信的愚蠢,但我无法弄清楚是否:

  • 我是一个白痴
  • 我误解了一些事情
  • 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");  
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用.没有错误,只是没有.插入断点/调试行表明我甚至没有调用Load事件.

此时我决定检查在Designer.cs文件中是否正确设置了Load事件.

 this.Load += new System.EventHandler(this.TVHost_Load);
Run Code Online (Sandbox Code Playgroud)

似乎是合法的.

如果我从表单中删除Web浏览器控件,则会触发load事件.

我不明白这一点,控制如何防止使用它的方法首先触发?

继续,我发现了这个:http: //social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d6e427b2-9cc9-4318-bb05-11363025e3f7/

TL;链接的DR如下:"如果窗体上的Web浏览器设置为Visible = true,则加载将不起作用"

确实如此,如果我将webbrowser的默认可见性更改为false,则控件的load事件将触发.我可以通过在load事件中设置浏览器的可见性来解决此问题.

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

很奇怪.

虽然这个"修复"有效,但我发现它令人难以置信的hacky并且想知道是否有人对这种行为有任何解释?

令人惊讶的是,我在2005年的MS Connect中发现了这个错误 - http://connect.microsoft.com/VisualStudio/feedback/details/116535/when-adding-a-webbrowser-control-to-a-user-control -the-负载意志不火#

Joe*_*ite 3

从您链接到的Connect bug的讨论中:

目前,如果要触发 Load 事件,可以在属性网格中设置 WebBrowser 控件的 URL 属性。URL 可以是您想要的任何内容,如果您不希望它以加载的页面开头,甚至可以是 about:blank。

因此,如果您进入设计器并将WebBrowserUrl属性设置为字符串about:blank(这告诉WebBrowser加载一个空页面),那么您的用户控件应该再次开始获取其Load事件。