【问题标题】:How to save state of checkbox, textbox and ... after closing a program in c#如何在c#中关闭程序后保存复选框、文本框和...的状态
【发布时间】:2011-04-20 22:25:18
【问题描述】:

在我用 Visual Studio 2010 制作并使用 WinForms 的 C# 程序中,我希望程序保存一些复选框和文本框的状态,以便下次加载程序时,它们会被选中或取消选中,因为它们是上次运行的状态。文本框内的字符串等也一样...

实现这一目标的正确方法是什么? .NET 中有内置的东西吗?任何提示和代码 sn-ps 都会被应用!

谢谢

【问题讨论】:

    标签: c# winforms checkbox state application-settings


    【解决方案1】:

    您可能希望在 FormClosing 事件期间从您的 UI 中读取相关值,然后将它们保存到用户设置中。

    看看:http://codehill.com/2009/01/saving-user-and-application-settings-in-winforms/

    【讨论】:

      【解决方案2】:

      我会将值绑定到用户设置,并保存配置 OnClose 事件。

      【讨论】:

        【解决方案3】:

        一种方法是使用 XML 配置文件并将其序列化:

        ConfigManager.cs

        using System;
        using System.Collections.Generic;
        using System.Text;
        using System.Drawing;
        
        
        namespace MyApplication
        { [ Serializable() ]
        
            public class ConfigManager
            {
        
                private int removeDays = 7;
        
                public ConfigManager() { }
        
                public int RemoveDays
                {
                    get
                    {
                        return removeDays;
                    }
                    set
                    {
                        removeDays = value;
                    }
                }
        }
        

        在您的应用程序中的某处

        private ConfigManager cm;

        private XmlSerializer ser;

        ...

        然后你必须加载配置:

        private void LoadConfig()
                {
                    try
                    {
                        cm = new ConfigManager();
                        ser = new XmlSerializer(typeof(ConfigManager));
                        filepath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + cm.filepath;
        
                        if (File.Exists(filepath))
                        {
                            FileStream fs = new FileStream(filepath, FileMode.Open);
                            cm = (ConfigManager)ser.Deserialize(fs);
        
                            // do something
                        }
                    } catch (Exception ex) { }
              }
        

        保存:

        XmlSerializer ser;
        ConfigManager cm;
        ...
        private void saveConfig() 
        {
            try {
                cm.RemoveDays = 6;
                TextWriter tw = new StreamWriter(filepath, false);
                ser.Serialize(tw, cm);
                tw.Close();
            } catch (Exception ex)
        }
        

        【讨论】:

          【解决方案4】:

          您提出了非常广泛的问题。有两种查看方式。

          1) 如果您需要持久化应用程序级别的配置,最好的办法是使用Application Settings。可以序列化用户使用您的应用程序完成的程序设置,并在程序重新启动后恢复它们。这适用于 WinForms 和 WPF:

          2) 如果你需要用户级别的持久化,你需要user settings

          此外,您可以创建自定义类来实现存储您需要的所有配置属性。

          实现 ISerializable 并将其标记为 [Serializable]。您可以将其标记为 [Serializable],但如果您将来添加新属性,则会遇到反序列化问题。

          添加版本属性。

          添加两个静态方法:加载和保存。这些方法使用 IsolatedStorage 将您的配置类反序列化/序列化到磁盘。你可以使用任何你想要的序列化——我使用二进制。为什么不是 XML?因为二进制更快,用户永远不需要进入这些文件。我曾经为 .net 2.0 这样做过。

          【讨论】:

          • 我一直在向我的配置类添加新属性,没有任何反序列化问题。
          • 谢谢,这些使用应用程序设置完成的设置是否会保存在每次安装程序的计算机上?
          • @Sean87:Asp.net 使用 SettingBase 类执行此操作,另一个术语是 ASP.NET Profiler。 msdn.microsoft.com/en-us/library/2y3fs9xs.aspx。它使用自定义提供程序(例如 SqlProfileProvider)存储应用程序所在的位置以及数据库中的内容:msdn.microsoft.com/en-us/library/0580x1f5.aspx
          • 好吧,我正在做的只是桌面程序而不是 ASP,那么在我的情况下会是什么样子?
          • 可执行文件所在的同一台机器,SqlProfileProvider 在 Windows 或 Web 应用程序中很常见。你的情况很简单。
          猜你喜欢
          • 2020-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-11
          • 2012-10-01
          • 1970-01-01
          相关资源
          最近更新 更多