【发布时间】:2010-09-22 12:49:00
【问题描述】:
我想在启动时隐藏我的应用程序的主窗口,所以我把它放在构造函数中:
this.Hide();
但这并没有隐藏我的表单。似乎我只能获得隐藏表单的按钮。我在这里做错了吗?
【问题讨论】:
我想在启动时隐藏我的应用程序的主窗口,所以我把它放在构造函数中:
this.Hide();
但这并没有隐藏我的表单。似乎我只能获得隐藏表单的按钮。我在这里做错了吗?
【问题讨论】:
你可以使用这行代码。它不会隐藏它,但它会被最小化:
this.WindowState = FormWindowState.Minimized;
另外,如果你不希望它显示在任务栏上,你可以添加这一行:
this.ShowInTaskbar = false;
但是,如果您不希望它一开始就可见,为什么要创建表单呢?
【讨论】:
this.Hide() 在从表单构造函数调用时实际上并没有隐藏表单吗?
Load 事件附加了一个方法,以便在加载表单后使用 this.Hide() 正确隐藏窗口。谢谢!
只需重写 OnVisibleChanged 方法并在其中更改表单的可见性,如下所示:
protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
this.Visible = false;
}
就是这样!简单干净。
【讨论】:
如果您更愿意使用 this.Hide 或 this.Show,您可以这样做
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
this.Hide();
}
【讨论】:
我尝试通过将 Visible 设置为 false 或隐藏在构造函数和 OnLoad 事件中来做到这一点。
这些都没有任何效果,因为在创建表单后和触发 OnLoad 事件后,在 SetVisibleCore 中将表单设置为可见。
在 Shown 事件中将表单设置为隐藏有效,但表单在屏幕上闪烁片刻。
您还可以覆盖 SetVisibleCore 并将值设置为 false,但不会触发 OnLoad 并且其他一些事件会被搞砸,例如表单关闭。
我认为最好的解决方案是在调用 Application.Run() 之前将表单设置为最小化并且不显示在任务栏中。
所以而不是:
Application.Run(new MainForm());
做:
MainForm form = new MainForm();
form.WindowState = FormWindowState.Minimized;
form.ShowInTaskbar = false;
Application.Run(form);
然后应用程序将在触发所有正确事件(甚至 OnShown)的情况下运行,并且不会显示表单。
如果您希望之后能够像平常一样隐藏/显示表单,那么您需要将 WindowState 和 ShowInTaskbar 设置回 Normal 和 true。
在 Shown 事件中,您可以将 ShownInTaskbar 设置回 true,然后正确隐藏表单。
this.Shown += new System.EventHandler(this.MainFormShown);
...
void MainFormShown(object sender, EventArgs e)
{
this.ShowInTaskbar = true;
this.Visible = false;
}
在窗体隐藏时将 WindowState 设置回 Normal 无效,因此您需要在再次显示窗体后执行此操作,否则图标将在任务栏中但窗体将被最小化。
this.Show();
this.WindowState = FormWindowState.Normal;
【讨论】:
在将表单加载到应用程序的主入口点之前,尝试将其可见属性设置为 false。
Form1 obj = new Form1();
obj.visible = false;
Application.Run(obj);
或者尝试将表单的坐标设置为更高的位置,例如 9000、9000。
【讨论】:
您可以使用Form.Hide() 启动隐藏表单:
Form2 form = new Form2();
//Start Form2 hidden
form.Hide();
//Close Form2
form.Close();
【讨论】:
您可以在表单中创建一个 firstOpen 布尔变量并在 Show 事件中创建它
private void Form1_Shown(object sender, EventArgs e)
{
if (firstOpen)
{
this.WindowState = FormWindowState.Minimized;
Hide();
notifyIcon1.Visible = true;
}
firstOpen = false;
}
在第一次显示时,它会被隐藏。下次正常使用。
【讨论】:
要在启动时隐藏表单,实际上非常简单。您可以创建表单并将其存储在局部变量中,并且根本不将表单放入Application.Run(),以便在启动时不会呈现:
Form1 form = new Form1();
Application.Run();
Øyvind 说得对,因为表单还没有准备好,所以从构造函数调用 this.Hide() 将不起作用。这样,由于表单已经创建好了,你可以在表单的任何函数中调用this.Show(),如果要隐藏它,可以调用this.Hide()。
【讨论】: