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

时间:2010-09-22 12:49:00

标签: c# forms

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

this.Hide();

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

8 个答案:

答案 0 :(得分:27)

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

this.WindowState = FormWindowState.Minimized;

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

this.ShowInTaskbar = false;

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

答案 1 :(得分:13)

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

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

就是这样!简单干净。

答案 2 :(得分:4)

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

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

答案 3 :(得分:2)

我尝试将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;
}

将窗体设置恢复为“正常”而隐藏窗体无效,因此您需要在再次显示窗体后执行此操作,否则图标将位于任务栏中,但窗体将最小化。

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

您可以使用Form.Hide()启动隐藏的表单:

Form2 form = new Form2();
//Start Form2 hidden
form.Hide();
//Close Form2
form.Close();

答案 6 :(得分:0)

您可以在表单中创建一个 firstOpen bool 变量,并在 Show 事件中进行设置

    private void Form1_Shown(object sender, EventArgs e)
    {
        if (firstOpen)
        {
            this.WindowState = FormWindowState.Minimized;
            Hide();
            notifyIcon1.Visible = true;
        }
        firstOpen = false;
    }

在第一次显示时,它会被隐藏。下次会正常使用。

答案 7 :(得分:0)

要在启动时隐藏表单,其实很简单。您可以创建表单并将其存储在局部变量中,并且只是不将表单放在 Application.Run() 中,这样它就不会在启动时呈现:

Form1 form = new Form1(); 
Application.Run();  

Øyvind 是正确的,从构造函数调用 this.Hide() 是行不通的,因为表单还没有准备好。这样,由于表单已经创建好了,可以在表单的任何函数中调用this.Show(),如果想隐藏就调用this.Hide()