为什么在Form1_load事件中,this.Hide()不起作用?
在Form1_load事件中,为什么this.Hide()方法不起作用?
Visible属性对于窗体来说非常重要,它与传统的.NET编程模型紧密相关,该模型只在最后一刻分配资源。这种延迟加载的特性是.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事件将不会触发,最好不要使用它。
问题的原因是在Form1_Load事件中调用Hide()方法之前,窗体还没有显示出来。
解决方法是改用Form.Shown事件来调用Hide()方法。
以下是整理后的文章:
在使用Form1_Load事件中调用Hide()方法时,出现了无效的问题。经过查找,发现问题的原因是在窗体还没有显示出来时,就调用了Hide()方法。
根据微软的官方文档http://msdn.microsoft.com/en-us/library/86faxx0d.aspx,可以了解到Form.Load事件是在窗体加载完成后立即引发的。因此,在Form1_Load事件中调用Hide()方法时,窗体还没有显示出来,因此无效。
幸运的是,通过进一步的研究,发现可以使用Form.Shown事件来解决这个问题。Form.Shown事件是在窗体已经显示出来后引发的。因此,将Hide()方法的调用放在Form.Shown事件中,就可以实现在窗体显示后隐藏窗体的效果。
在实际操作中,有人尝试将Form1_Load事件重命名为Form1_Shown事件,并在其中调用Hide()方法,但却没有成功。这可能是因为还有其他需要注意的地方,导致无法正常工作。但通过查找相关文档和调试代码,可以解决这个问题。
总结起来,问题的原因是在Form1_Load事件中调用Hide()方法时,窗体还没有显示出来。解决方法是改用Form.Shown事件来调用Hide()方法。