首页 > 解决方案 > 当我启动它时,我的表单打开然后关闭

问题描述

当我尝试启动我的表单时,它会像从未打开过一样闪烁。

我已经查看了我的代码,没有任何问题

这是我的代码:

public partial class Initialization : Form
{
    public Initialization()
    {
        InitializeComponent();
    }

    private async Task Wait1(int Milliseconds)
    {
        await Task.Delay(Milliseconds);
    }

    private async void Wait(int Millisecondsdew)
    {
        Wait1(Millisecondsdew);
    }
    private void Initialization_Load(object sender, EventArgs e)
    {
        MessageBox.Show("Initialization");
        ///Setup Stuff///
        ShowIcon = false;
        ControlBox = false;
        FormBorderStyle = FormBorderStyle.FixedDialog;
        Text = "";
        /// Start Initializing///
        richTextBox1.Text = "Initializing....";
        Wait(1000);
        if (File.Exists(@"C:\Program Files (x86)\Lazy Tools\AdditionalFiles.exe"))
        {
            richTextBox1.Text = "Initializing.... \n Software Installers 1 Exists";
            Wait(1000);
            if (File.Exists(@"C:\Program Files (x86)\Lazy Tools\SoftwareInstallers2.exe"))
            {
                richTextBox1.Text = richTextBox1.Text + "\n Software Installers 2 Exists";
                Wait(1000);
            }
            else
            {
                MessageBox.Show("Please reinstall software store, \n Software Installers 2 is missing");
            }
        }
        else
        {
            MessageBox.Show("Please reinstall software store, \n Software Installers 1 is missing");
        }
    }
}

异步在我的第一种形式上运行良好,但这是第二种形式。当我调用第二个表格时,它会闪烁,就像从未打开过一样。

标签: c#winforms

解决方案


显然,将ControlBox属性设置为 false ,然后在表单加载后将属性设置Text为空字符串会导致表单关闭(这似乎是一个错误)。

重现问题的代码:

// Using other events like `Form_Shown` or even a `Button_Click` still has the same behavior
private void Form1_Load(object sender, EventArgs e)
{
    this.ControlBox = false;
    this.Text = "";
}

作为一种解决方法,您可以改为将FormBorderStyle属性设置为FormBorderStyle.None

this.FormBorderStyle = FormBorderStyle.None;

..这将产生与您想要达到的效果类似的效果。这实际上是隐藏标题栏的标准方法。

如果您不想隐藏边框或者您确实想使用ControlBoxText属性,您可以执行以下任何操作:

  • 在设计时设置这两个属性。或者...

  • 将这两行移到表单的构造函数中:

    public Initialization()
    {
        InitializeComponent();
        this.ControlBox = false;
        this.Text = "";
    }
    
  • 或者确保在Text属性之前设置ControlBox属性:

    private void Initialization_Load(object sender, EventArgs e)
    {
        this.Text = "";
        this.ControlBox = false;
    }
    

推荐阅读