为什么不是this.Hide()在Form1_load事件中工作?

我实际上有一个经典的Windows窗体和一个按钮。 我有这个代码

private void Form1_Load(object sender, EventArgs e) { this.Hide(); this.Visible = false; } private void button1_Click(object sender, EventArgs e) { this.Hide(); } 

我想知道为什么在加载后不会隐藏表单,但是当我点击该按钮时它会起作用? 有人可以解释一下吗?

在窗体实际可见之前会触发Load事件。 尝试使用Form.Shown事件。 当窗体实际绘制在屏幕上时,这将触发。

因为您在显示表单之前调用Hide()。

http://msdn.microsoft.com/en-us/library/86faxx0d.aspx

可见属性对表单来说是一个非常大的问题。 与传统的.NET编程模型联系在一起,只在最后一刻分配资源。 懒。

Load事件在创建本机Windows窗口之后立即触发,就在用户可见之前。 设置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事件不会运行,最好不要使用它。