为什么在Form1_load事件中,this.Hide()不起作用?

10 浏览
0 Comments

为什么在Form1_load事件中,this.Hide()不起作用?

我有一个经典的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
0 Comments

在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事件将不会触发,最好不要使用它。

0
0 Comments

问题的原因是在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()方法。

0
0 Comments

问题出现的原因是在Form1_load事件中使用this.Hide()无效,这是因为Load事件在窗体实际可见之前触发。解决方法是使用Form.Shown事件,该事件在窗体实际绘制在屏幕上时触发。可以将this.Hide()代码放在Form.Shown事件中来实现隐藏窗体。

另外,还可以尝试将代码放在其他后续触发的事件中,或者在实例化窗体的代码中隐藏窗体。如果依赖于窗体构造函数中的某些代码运行,可以在实例化窗体后稍后调用ShowDialog()方法。

最后,根据问题描述,提到了创建一个ToolTip图标应用程序,但没有提供具体的实现细节。

0