在启动时隐藏表单:为什么不这样。隐藏()隐藏我的表单?
我想在启动时隐藏我的应用程序的主窗口,所以我把它放在构造函数中:
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。