如何在 C# 运行时保存多个用户设置

Posted

技术标签:

【中文标题】如何在 C# 运行时保存多个用户设置【英文标题】:How do I save multiple user settings in runtime in C# 【发布时间】:2021-07-23 18:58:26 【问题描述】:

我试图让我的应用在关闭应用后保持原样。因此,我想将 ListView 中的一组项目保存到设置中,但我不知道该怎么做。我找到了一些解决方案,但我认为它们已经过时,因为它们似乎不起作用。

图片显示了我想要保存的 ListView 中的一组项目,以便它们在重新启动应用程序后出现:

Items

这是我希望它们出现的地方:

Settings

这是迄今为止我尝试过的部分代码

 private void btn_SaveConfig_Click(object sender, EventArgs e)
    
        int i = 0;
        Settings.Default["IP"] = tBox_discoverServerFrom.Text;
        Settings.Default["DiscoveredServers"] = cBox_discoveredServers.Text;
        foreach (var item in lV_groups.Items)
        
            var property = new System.Configuration.SettingsProperty("Group"+i);
            property.PropertyType = typeof(string);
            property.Name = "Group " + i;
            Settings.Default.Properties.Add(property);
            Settings.Default.Save();
            i++;
        
    

【问题讨论】:

【参考方案1】:

如果您想保存大量数据,我认为使用设置 API 不是一个好主意。

我会推荐以下内容

    创建一个描述您要保存的所有数据的类。为了使序列化更容易,它应该有一个参数少的构造函数和所有属性的公共设置器。这有时称为数据传输对象 (DTO) 使用json 将对象序列化为文件。您通常会将文件放在本地应用数据文件夹中的子文件夹中:Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)。 在启动应用程序时执行相反的操作。如果有文件,使用Json反序列化,随心所欲地使用。 您可以选择添加逻辑以定期保存文件,这样可以在应用程序崩溃的情况下进行恢复。您可能还希望某些系统保留多个文件,以防应用程序或计算机在保存操作过程中崩溃,从而导致文件损坏。

【讨论】:

谢谢!你可能知道 ListViews 的一些例子吗? @Tenki 这将取决于您的对象模型。没有自动功能。通常还建议使用 MVVM / MVP / MVC 方案将模型与 UI 分开。因此,理想情况下,您的序列化/存储层不会以任何方式依赖于 UI。 好的,谢谢,我试试看。我有最后一个问题。正如您从第一张图片中看到的那样,我在用于项目的组下方有另一个 ListView。项目被放置在选择的组内。例如,我可能在 Group0 中有字符串、int、double 项,在 Group1 中有 bool、int、float 项。我是否必须为每个 ListView 单独进行序列化,或者我可以以某种方式在组对象中创建项目对象并以这种方式将它们一起序列化。 @Tenki 序列化/DTO 对象可以包含任意对象和嵌套级别,只要所有对象都是可序列化的。因此,您可以一次性序列化这两个组以及您可能想要保存的任何其他数据。

以上是关于如何在 C# 运行时保存多个用户设置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中保存组合框的用户设置?

C# 向用户询问服务器名称并在每次运行应用程序时保存

如何将多个用户输入保存到微调器?

如何在 C# 中创建相对于用户文档的文件目录?

如何让多个 Windows 用户(非管理员)修改并保存相同的设置?

c#如何播放多个.wav文件,并设置每个文件的音量