取消表单加载
我有以下代码:
这称为第二种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"); } }