如何在c#中关闭程序后保存复选框,文本框和...的状态

时间:2011-04-20 14:05:31

标签: c# winforms checkbox state application-settings

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

实现这一目标的正确方法是什么? .NET中有内置的东西吗?任何提示和代码片段都会受到欢迎!

由于

4 个答案:

答案 0 :(得分:7)

您可能希望在FormClosing事件期间查看UI中的相关值,然后将其保存到用户设置中。

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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

执行此操作的一种方法是使用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)
}

答案 3 :(得分:1)

你提出了非常广泛的问题。有两种方法可以看待它。

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

2)如果您需要用户级持久性,则需要user settings

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

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

添加版本属性。

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