在启动时隐藏表单:为什么不这样。隐藏()隐藏我的表单?

我想在启动时隐藏我的应用程序的主窗口,所以我把它放在构造函数中:

this.Hide(); 

这并不掩盖我的forms。 看起来我只能通过按钮来隐藏表单。 我在这里做错了吗?

你可以使用这行代码。 它不会隐藏它,但它会被最小化:

 this.WindowState = FormWindowState.Minimized; 

此外,如果您不希望它显示在任务栏上,您可以添加以下行:

 this.ShowInTaskbar = false; 

但是,如果您不希望首先看到它,为什么要创建该表单?

只需覆盖OnVisibleChanged方法并在其中更改表单的可见性,如下所示:

 protected override void OnVisibleChanged(EventArgs e) { base.OnVisibleChanged(e); this.Visible = false; } 

就是这样! 简单干净。

如果您更愿意使用此。隐藏或此。您可以这样做

 protected override void OnShown(EventArgs e) { base.OnShown(e); this.Hide(); } 

我尝试通过将Visible设置为false或隐藏在构造函数和OnLoad事件中来实现此目的。

这些都没有任何效果,因为在创建表单之后以及在SetVisibleCore中触发OnLoad事件之后,表单被设置为Visible。

将表单设置为隐藏在“已显示”事件中,但表单上的表单会闪烁一会儿。

您还可以覆盖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设置回“正常”无效,因此您需要在再次显示表单后执行此操作,否则图标将位于任务栏中,但表单将最小化。

 this.Show(); this.WindowState = FormWindowState.Normal; 

在将表单的visible属性加载到应用程序的主入口点之前,请尝试将其设置为false。

 Form1 obj = new Form1(); obj.visible = false; Application.Run(obj); 

或者尝试将表单的坐标设置为更高的位置,如9000,9000。