取消表单加载

我有以下代码:

这称为第二种forms

private void updateToolStripMenuItem_Click(object sender, EventArgs e) { Update fm = new Update(); fm.ShowDialog(); } 

这是构造函数

  public Update() { InitializeComponent(); } 

这是负载

  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(); } } 

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

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

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

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

  MyForm myForm = new MyForm(); myForm.Opacity = 0; myForm.Show(); 

然后:

 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(); } 

最好的方法:

 private void Form_Load(object sender, EventArgs e) { switch(funct()) { case 2: this.BeginInvoke(new MethodInvoker(this.Close)); break; case 3: this.BeginInvoke(new MethodInvoker(this.Close)); break; default: MessageBox.Show("Something"); } } 

在您选择首先打开表单之前,您可能应该执行任何检查。

所以类似于:

 if(funct() == "1") { var form = new Form(); form.ShowDialog(); } 

我假设Update_Load是你的Update_Load处理程序? 您的表单显示调用。 如果你不想显示它,那就太晚了。 将updateToolStripMenuItem_Click更改为:

 String ver = checkver(); if (ver == "update") { if (RemoteFileExists(dlUrl)) { Update fm = new Update(); fm.ShowDialog(); } else MessageBox.Show("An error occurred. Please try later."); } else if (ver == "newest") { MessageBox.Show("You are currently using the newest version."); } 

并将Update_Load更改为:

 WebClient webClient = new WebClient(); webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); webClient.DownloadFileAsync(new Uri(dlUrl), ""); 

也许首先隐藏它,然后只显示funct()==“1”:

 private void Form_Load(object sender, EventArgs e) { this.Close(); if (funct() == "1") MessageBox.Show("Something"); } 

试试这个

 private void Form_Load(object sender, EventArgs e) { switch(funct()) { case 2: this.Close(); break; case 3: this.Close(); break; default: MessageBox.Show("Something"); } }