You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm无需打开第二窗体跨窗体传值及列表数据保存问题

解决方案

核心问题根因

你当前的两个问题本质是同一个原因导致:所有窗体都各自独立实例化了Controller对象,每个Controller的客户列表是互相隔离的,没有共用同一份数据源。

问题1:Form1与Form2客户列表同步实现

完全可以实现,无需提前打开Form2,调整方案如下:

  1. 首先在Program类中声明全局共用的Controller实例,保证所有窗体都访问同一份数据源:
static class Program
{
    // 全局静态Controller,整个程序运行周期内仅存在一份
    public static Controller SharedController = new Controller();

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
  1. 修改Form1的Controller引用,不再自行实例化:
    把Form1代码里的Controller control = new Controller();替换为:
Controller control = Program.SharedController;
  1. 修改Form2的Controller引用,同样使用全局实例:
    把Form2代码里的Controller control = new Controller();替换为:
Controller control = Program.SharedController;

调整完成后,你在Form1点击添加按钮新增的客户都会存入全局的Controller列表中,Form2不管什么时候打开,构造函数里调用的DisplayCustomers()都会自动加载最新的客户列表,完全不需要提前打开Form2。

问题2:关闭Form1重新打开数据不丢失实现

完成上面的全局数据源调整后,这个问题会自动解决:
全局SharedController的生命周期和整个程序一致,只要不关闭整个程序,客户列表数据会一直保留。你每次重新打开Form1时,构造函数调用的DisplayCustomers()会直接从全局列表中加载所有历史客户,不会出现数据丢失的情况。

注意事项

你提供的Form2代码存在笔误:Form2类的构造函数名写为FormAccounts,和类名不符,需要修改为public Form2()否则会编译报错。

内容的提问来源于stack exchange,提问作者DJ Dog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:36:03