我有一条消息提示用户升级连接到计算机的某些设备。我想让用户以后通过在取消前选中一个复选框来禁用此消息。
如何存储此用户选项,以便下次执行程序时,我可以避免根据应用程序上次会话中的用户选择显示此消息?
答案 0 :(得分:2)
两种最干净的方式是注册表和User Settings。
我更喜欢用户设置,因为:
您只需转到项目属性中的“设置”选项卡,添加设置,并将其类型设置为“用户”。 然后在更改后保存设置:
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");