C# 如何设置主Winform的默认可见性
我已经一步一步地运行了我的程序,但仍然找不到form.visible的设置位置 以下是Form1.cs的代码: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
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);
}