Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置主Winform的默认可见性_C#_Winforms - Fatal编程技术网

C# 如何设置主Winform的默认可见性

C# 如何设置主Winform的默认可见性,c#,winforms,C#,Winforms,我已经一步一步地运行了我的程序,但仍然找不到form.visible的设置位置 以下是Form1.cs的代码: public Form1() { InitializeComponent(); this.Hide(); } 我加了这个。隐藏;但它根本不起作用 我甚至修改了Program.cs,从: Application.Run(new Form1()); 致: 但是主窗体仍然显示,甚至添加了form1.Enable=false;不会阻止窗体显示。我也试着加上这个;在Form1

我已经一步一步地运行了我的程序,但仍然找不到form.visible的设置位置

以下是Form1.cs的代码:

public Form1()
{
    InitializeComponent();
    this.Hide();
}
我加了这个。隐藏;但它根本不起作用

我甚至修改了Program.cs,从:

Application.Run(new Form1());
致:

但是主窗体仍然显示,甚至添加了form1.Enable=false;不会阻止窗体显示。我也试着加上这个;在Form1_Load中,它工作了,但在最终隐藏之前,主窗体出现并闪烁

我现在完全糊涂了。那么,如何加载主窗体而不显示它呢?把它藏起来直到我把它叫作Show

加载表单之前,不能将表单visible设置为false。请尝试以下代码:

//In Main Function
Form1 form1 = new Form1();
form1.WindowState = FormWindowState.Minimized;
form1.ShowInTaskbar = false;
Application.Run(new Form1());
//In Form Shown
private void Form1_Shown(object sender, EventArgs e)
{
this.Visible = false;
}

您可以尝试以下方法:

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var form = new Form1();
        form.DoBeforeShow();
        Application.Run(form);
    }
的文档清楚地说明了它将使表单可见。只要您需要将其隐藏,就不应该将该表单传递给Application.Run。根据您的需要,您可以不使用参数或创建自定义ApplicationContext


编辑:我只是想补充一点,不显示表单,您不应该显示表单。我不明白这里有多少用户认为显示表单然后快速隐藏是个好主意,或者让显示表单的代码不显示表单。您不应该做错误的事情,然后在事后进行修复。您首先应该做正确的事情。

为什么不重写SetVisibleCore方法:

bool showForm = false;

protected override void SetVisibleCore(bool value)
{    
   base.SetVisibleCore(showForm);
}
这将在窗体打开之前隐藏它。使用许多方法,您会看到表单在其.Visible或类似属性设置为hide之前短暂闪烁


显然,当您想再次显示“showForm”时,您需要另一种方法将其翻转为true,即NotifyIcon事件。

您可能正在查找不透明度属性。可以从IDE中将不透明度设置为0.0。它可以取0.0到1.0之间的值。

首先,您可以加载要永久显示给用户的表单。在构造函数中,只调用应该隐藏的窗体。之后,您可以关闭或隐藏它。

如果您需要在加载表单之前初始化某些内容,您不能在加载表单之前在Program.cs中这样做吗?您可以在应用程序之前推送您的逻辑。运行New Form1语句,准备好后调用它。在预加载内容时显示一个启动屏幕如何?您甚至可以显示一个进度条,用户不会觉得应用程序没有启动。@sventevit感谢您的回答。问题是我需要的逻辑不能放在Program.cs中。事实上,添加表单form2=新表单;在Form1.cs执行正常的情况下,新表单是否显示取决于属性form2.Visible。但是调用Application.Runform2将显示表单,即使form2.visible设置为false。我不知道为什么…@jimjupiter谢谢你的回答。但事实上,我甚至不知道表单应该在什么时候显示,它被设计成在另一个线程调用.Show之前是不可见的。连线的事情是Application.Run将显示表单,而不管属性form.Visible=false如何。真让人困惑。谢谢你,我认为你的回答是解决我问题的最好办法。这很有帮助~
bool showForm = false;

protected override void SetVisibleCore(bool value)
{    
   base.SetVisibleCore(showForm);
}