C#/.NET - WinForms - 实例化一个表单而不显示它

Bud*_*Joe 22 .net c# events visibility winforms

我在加载事件期间将窗体的可见性更改为false并且窗体仍然显示自身.什么是正确的事件来绑定这个.Visible = false; 至?我想实例化Form1而不显示它.

using System;
using System.Windows.Forms;

namespace TestClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Visible = false;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*örk 24

无论您在显示表单之前尝试设置Visible属性多少,它都会弹出.据我了解,这是因为它是当前ApplicationContext的MainForm.使表单自动加载但在应用程序启动时不显示的一种方法是更改​​Main方法.默认情况下,它看起来像这样(.NET 2.0 VS2005):

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}
Run Code Online (Sandbox Code Playgroud)

如果您改为执行此类操作,应用程序将启动,加载表单并运行,但表单不会显示:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Form1 f = new Form1();
    Application.Run();        

}
Run Code Online (Sandbox Code Playgroud)

我不完全确定这有用,但我希望你知道; o)

更新:似乎您不需要将Visible属性设置为false,或者提供ApplicationContext实例(将在"引擎盖下"为您自动创建).相应地缩短了代码.


Nic*_*zer 11

我知道这是一个老问题,但我偶然发现了它,并且很惊讶没有人提到过SetVisibleCore:

bool isVisibleCore = false;
protected override void SetVisibleCore(bool value)
{
    base.SetVisibleCore(isVisibleCore);
}
Run Code Online (Sandbox Code Playgroud)

在该代码段中,只要isVisibleCore保持为假,表单将保持不可见.如果在实例化表单时将其设置为false,则Visible = false在"已显示"事件中设置时,您将无法获得短暂的可见性闪烁.


Jos*_*ian 10

我花了一些时间找到一个正常工作的解决方案.

在属性窗口下将名为WindowState的属性设置为Minimized,将ShowInTaskbar设置为False.填写完整的表单后,请在下面的代码行中调用.

        this.ShowInTaskbar = true;
        this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
        //this.WindowState = System.Windows.Forms.FormWindowState.Normal;
Run Code Online (Sandbox Code Playgroud)

PS:此解决方案在Visual C#2008 Express Edition上进行了测试