将数据存储在C#应用程序中

时间:2013-11-14 13:50:18

标签: c#

我有一条消息提示用户升级连接到计算机的某些设备。我想让用户以后通过在取消前选中一个复选框来禁用此消息。

如何存储此用户选项,以便下次执行程序时,我可以避免根据应用程序上次会话中的用户选择显示此消息?

2 个答案:

答案 0 :(得分:2)

两种最干净的方式是注册表和User Settings

我更喜欢用户设置,因为:

  1. 他们是XML(不需要注册表黑客攻击)
  2. 很多笨拙的工作是由框架
  3. 完成的
  4. 使用ClickOnce自动升级用户设置
  5. 您只需转到项目属性中的“设置”选项卡,添加设置,并将其类型设置为“用户”。  然后在更改后保存设置:

    Properties.Settings.Default.ShowDisconnectMessage = false;
    Properties.Settings.Default.Save();
    

    注册表的工作方式类似,但它需要更多的代码,并且不是强类型的:

    RegistryKey key = Registry.CurrentUser.OpenSubKey("Software",true);
    Key = key.OpenSubKey("AppName", true);
    key.SetValue("ShowDisconnectMessage ", "false");
    

答案 1 :(得分:1)

您需要在应用程序中使用自定义表单。该表单需要显示消息以及复选框。然后你会想要在某个地方存储这些信息。我将在应用程序配置文件中说。

因此,要将数据保存在配置文件中,首先要构建一些扩展方法以使其更容易:

public static class Extensions
{
    public static void SetValue(this KeyValueConfigurationCollection o,
        string key,
        string val)
    {
        if (!o.AllKeys.Contains(key)) { o.Add(key, val); }
        else { o[key].Value = val; }
    }

    public static string GetValue(this NameValueCollection o,
        string key,
        object defaultVal = null)
    {
        if (!o.AllKeys.Contains(key)) { return Convert.ToString(defaultVal); }
        return o[key];
    }
}

然后,当您想要读取该值以确定是否应该显示该消息时,请执行以下操作:

var val = (bool)ConfigurationManager.AppSettings.GetValue("ShowTheMessage");

然后当您想要保存值时,请执行以下操作:

var config = ConfigurationManager.OpenExeConfiguration(
    ConfigurationUserLevel.None);
var app = config.AppSettings.Settings;

app.SetValue("ShowTheMessage", checkBox.Checked);

config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
相关问题