-4

我有一条消息提示用户升级连接到计算机的某些设备。我想让用户在将来禁用此消息,方法是在按取消之前选中一个框。

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

4

2 回答 2

2

两种最简洁的方法是 Registry 和User Settings

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

  1. 它们在 XML 中(不需要注册表黑客)
  2. 很多繁重的工作是由框架完成的
  3. 用户设置通过 ClickOnce 自动在升级中保持不变

您需要做的就是转到项目属性中的“设置”选项卡,添加一个设置,然后将其类型设置为“用户”。
然后只需在更改设置后保存设置:

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");
于 2013-11-14T14:00:59.157 回答
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");
于 2013-11-14T13:54:28.023 回答