这可能会让人觉得非常愚蠢,但我不知道是否:
- 我是一个白痴
- 我误解了一些东西
- 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 浏览器控件,则会触发 load 事件。
我有点不明白,控件如何防止使用它的方法首先触发?
继续前进,我发现了这个: http ://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d6e427b2-9cc9-4318-bb05-11363025e3f7/
TL; DR 的链接如下:“如果表单上有一个设置为 Visible = true 的网络浏览器,则加载将不起作用”
如果我将 webbrowser 的默认可见性更改为 false,那么肯定会触发控件的加载事件。我可以通过在加载事件中设置浏览器的可见性来解决这个问题。
private void TVHost_Load(object sender, EventArgs e)
{
webBrowser1.Visible = true;
webBrowser1.Navigate("http://google.co.uk");
}
很奇怪。
虽然这个“修复”有效,但我发现它非常hacky并且想知道是否有人对这种行为有任何解释?
令人惊讶的是,我在 2005 年遗留的 MS Connect 中发现了这个错误 - http://connect.microsoft.com/VisualStudio/feedback/details/116535/when-adding-a-webbrowser-control-to-a-user-control -加载不会触发#