我实际上有一个经典的Windows窗体和一个按钮。我有这个代码
private void Form1_Load(object sender, EventArgs e)
{
this.Hide();
this.Visible = false;
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
}
我想知道为什么在加载后不会隐藏表单,但是当我点击该按钮时它会起作用?有人可以解释一下吗?
答案 0 :(得分:12)
在窗体实际可见之前会触发Load事件。尝试使用Form.Shown事件。当窗体实际绘制在屏幕上时,这将触发。
答案 1 :(得分:4)
因为您在显示表单之前调用了Hide()。
答案 2 :(得分:3)
Visible属性对表单来说是一个非常大的问题。与传统的.NET编程模型联系在一起,只在最后一刻分配资源。懒惰。
在创建本机Windows窗口之后立即触发Load事件,就在用户可以看到之前。设置Visible = true的行为会触发此事件链。或者更典型地,调用Show()方法。完全相同的事情。直到那时,原生窗口才重要。
然而,这有副作用,在设置Visible = true的过程中,您不能将Visible设置为false(或调用Hide,同样的事情)。这就是你的代码不起作用的原因。
如果您有NotifyIcon并且在用户单击图标之前不想让窗口可见,则可以获得您想要的内容,而不是非常不寻常。在创建表单之前,NI无法工作。看起来像这样:
protected override void SetVisibleCore(bool value) {
if (!IsHandleCreated && value) {
base.CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
这使您可以第一次调用Show(),但实际上并没有获得可见窗口。在此之后它表现正常。请注意Load事件不会运行,最好不要使用它。