与“ My.Settings.Reset”等效,但针对单个特定设置

时间:2019-04-23 20:34:45

标签: .net vb.net visual-studio winforms settings

我正在Visual Studio中编写Windows窗体应用程序,并且我拥有类型为string的用户范围应用程序设置,该设置具有默认值,该默认值是在设计时使用项目设计器的“设置”指定的“页面。

在我的应用程序中,我有一个对话框,用户可以在其中将设置更改为自定义值。该对话框还具有一个标记为“使用默认值”的复选框。如果选中该框,则我希望该设置恢复为应用程序默认值。

我设法通过将其设置为当前默认值来“静态地”执行此操作,例如:My.Settings.MyStringSetting = My.Settings.Properties.Item("MyStringSetting").DefaultValue。但是,这不是理想的,因为它不是持久的。如果应用程序默认值由于更新而更改,则用户值仍将设置为旧的默认值。

我想知道是否有一种方法可以像My.Settings.Reset一样从user.config文件中完全删除用户设置替代,但是对于这一单个设置。这样,即使应用程序默认值已更新,选中“使用默认设置”也将保留为真。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我不确定是否有办法从user.config文件中完全删除一项设置属性。但是,解决此问题的一种方法:

  

如果应用程序默认值由于更新而更改,则用户值仍将设置为旧的默认值。

..要做这样的事情:

  • 添加名为UpgradeRequired 1 的设置属性,并将其默认值设置为True
  • 添加另一个属性以反映“使用默认值”复选框的Checked状态(如果尚未使用)。对于此演示,我将其称为UseMyStringSettingDefaultValue
  • 当您有软件更新时,UpgradeRequired在默认情况下为True (假设程序集版本已更改)。因此,在您的应用程序启动时执行以下代码:

    If My.Settings.UpgradeRequired Then
        My.Settings.Upgrade()
        My.Settings.UpgradeRequired = False
        If My.Settings.UseMyStringSettingDefaultValue Then
            My.Settings.MyStringSetting = ' The new default value ↴
                My.Settings.Properties.Item("MyStringSetting").DefaultValue.ToString()
        End If
        My.Settings.Save()
    End If
    

1 您可能仍然需要to handle upgrading the settings correctly