取消表单加载

a12*_*773 4 c# forms winforms

我有以下代码:

这称为第二种形式

private void updateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Update fm = new Update();
            fm.ShowDialog();
        }
Run Code Online (Sandbox Code Playgroud)

这是构造函数

    public Update()
    {
        InitializeComponent();
    }
Run Code Online (Sandbox Code Playgroud)

这是负载

    private void Update_Load(object sender, EventArgs e)
    {
        String ver = checkver();
        if (ver == "update")
        {
            if (RemoteFileExists(dlUrl) == true)
            {
                WebClient webClient = new WebClient();
                webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                webClient.DownloadFileAsync(new Uri(dlUrl), "");
            }
            else
                MessageBox.Show("An error occurred. Please try later.");
        }
        else if (ver == "newest")
        {
            MessageBox.Show("You are currently using the newest version.");
            this.Close();
        }
        else
        {
            this.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,当函数结果是2或3时,表单显示毫秒然后关闭(闪烁).我希望表单不闪烁.可能吗?

我试图使用this.Hide(),this.Visible = False但没有任何帮助.

编辑:我把原始代码EDIT2:放更多的代码

ast*_*boy 8

您可以在加载之前隐藏表单,然后在您的if else条件中将其设置为可见.例如:

            MyForm myForm = new MyForm();
            myForm.Opacity = 0;
            myForm.Show();
Run Code Online (Sandbox Code Playgroud)

然后:

if (ver == "update")
        {
            if (RemoteFileExists(dlUrl) == true)
            {
               myForm.Opacity = 100;
               ...

            }
            else
                MessageBox.Show("An error occurred. Please try later.");
        }
        else if (ver == "newest")
        {
            MessageBox.Show("You are currently using the newest version.");
            this.Close();
        }
        else
        {
            this.Close();
        }
Run Code Online (Sandbox Code Playgroud)

  • @Loclip:虽然这个解决方案有效,但你真的不应该在表单内部调用`checkver`.属于一个单独的类的逻辑应该在决定是否显示表单之前进行检查.将表单的不透明度设置为0是一个丑陋的解决方法. (3认同)