嵌入式窗体切换数据不保存
当尝试的是用Panel嵌套窗体(如下调用函数),在切换窗体的时候会出现数据不被保存,变成初始化,尤其是在有串口连接的时候这种情况很是恼火,连接串口切换窗口后,串口变成初始化未连接,实则继续连接上的,导致串口占用…
private void OpenForm(Form frm)
{
frm.TopLevel = false;
frm.TopMost = false;
frm.WindowState = FormWindowState.Maximized;//设置窗体最大化
panelMain.Controls.Add(frm);
frm.Show();
}
所以我才去另外一种措施(如下),清除再把窗体控件添加进来,但又出现零一问题,除了主窗体数据被保存外,其他窗体连初始化数据都不显示。发现Form_Load()不执行或被Clear()掩盖了。
private void btnDebug_Click(object sender, EventArgs e)
{
ShowBar(sender as Button);
panelMain.Controls.Clear();
panelMain.Controls.Add(groupBox1);
panelMain.Controls.Add(groupBox2);
panelMain.Controls.Add(groupBox3);
panelMain.Controls.Add(groupBox4);
panelMain.Controls.Add(groupBox5);
panelMain.Controls.Add(groupBox6);
panelMain.Controls.Add(SendNum);
panelMain.Controls.Add(NumberText1);
panelMain.Controls.Add(ResNum);
panelMain.Controls.Add(NumberText2);
panelMain.Controls.Add(Resetcount);
}
尝试过网上什么创建全局变量来保存数据,切换窗体再赋值上去,这种是可行,但如果像文本控件很多的时候相当繁琐。另外尝试其他两种方法也是不可以的,这里不提及,都适合简单的窗体,像我这种比较复杂的就很麻烦。
这里的2是包含再1中的,作用就是软件启动的第一次初始化,仅此初始化一次。所以前面提到只有主窗体切换数据是不改变的,所以我们把这行代码加到主窗体中,用主窗体初始化带动一次(也仅此一次)其他窗体的初始化,如下:
注意,这里可以调用,包括上面可以调用其他窗体的控件属性是因为我把修饰符(控件调用因为是要改后台代码)改了,将private改为public static,并把报错的所有的this.删除,这里你可以把所有的private修改掉,把所有的this.删除,问题不大。(或者)因为static静态变量,模块外的函数调用不了,可以在模块的代码里用public修饰,public static void…,然后在主窗体实例化一次就可以用了。
最后看成果!
C#上位机演示1
C#上位机演示2
可能很多细节没详说,有问题私聊!