股票

C# 弹出form切换问题的总结

两个form切换,主form弹出从form,先上代码:

主:

  1. private void button1_C++lick(object sender, EventArgs e)
  2.         {
  3.             ASDSubForm subForm = new ASDSubForm();
  4.             subForm.StartPosition = FormStartPosition.C++enterScreen;
  5.             this.Enabled = false;
  6.             subForm.Show(this);
  7.         }

从:

  1. private void ASDSubForm_FormClosed(object sender, FormClosedEventArgs e)
  2. {
  3.     this.Owner.BringToFront();
  4.     this.Owner.Enabled = true;
  5. }

主要是解决了以下问题:

1,使用Show()方法,而不是ShowDialog()方法,避免在从form弹出后,主form的功能失效的问题。比如使用ShowDialog()时,主form类中的串口接收进程在从form弹出后就停止执行,所有接收到的数据只存在于缓存区,而不进入串口中断委托函数。

2,this.Enabled = false; 解决了从form弹出后,还能继续操作主form的问题;

3,subForm.StartPosition = FormStartPosition.CenterScreen; 是使弹出的form位置居于屏幕中心;

4,subForm.Show(this); 可以用 subForm.Parent = this; subForm.Show(); 这两句代替,以便subForm靠前显示,并且便于后续调用;

5,在subForm类中增加 _FormClosed 函数,在从form关闭时调用,以使主form前端展示并使能;

7,替换掉了定时器中检测主form的使能标记,然后使用 this.TopMost = true; this.Enabled = true; 的方式;因为这个方法会造成在定时间隔中,假设1s检测一次。在关掉从form时,由于主form的Enabled还处于false状态,导致此时form展示位于桌面其他应用(如网页等)的背景之下,直到执行TopMost时重新把form前置。看起来就是关掉从form,主form消失,然后突然一闪,弹出主form,体验很不好。

打赏
原文链接:,转发请注明来源!

发表评论