C# 解决嵌入式窗体切换数据不保存以及Form_Load()不执行的问题

嵌入式窗体切换数据不保存
当尝试的是用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

可能很多细节没详说,有问题私聊!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听原来是雨落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值