Настройки приложения winform: невозможно сохранить настройки приложения, которые были добавлены во время выполнения - PullRequest
5 голосов
/ 08 марта 2012

У меня возникли некоторые проблемы с сохранением настроек приложения во время выполнения ...

Если я изменяю область настроек на пользователя, она работает нормально, но в области приложения ничего не происходит ...

Я использовал:

Properties.Settings.Default.Save();

есть идеи?

спасибо

Ответы [ 3 ]

11 голосов
/ 08 марта 2012

Это потому, что установка области применения делает ее доступной только для чтения.

См. Использование настроек в C #

Настройки области приложения доступны только для чтения и могут быть изменены только во время разработки или путем изменения файла .exe.config между сеансами приложения. Однако параметры пользовательской области можно записать во время выполнения, так же как вы изменили бы любое значение свойства. Новое значение сохраняется в течение сеанса приложения. Вы можете сохранить изменения настроек пользователя между сеансами приложения, вызвав метод Settings.Save.

1 голос
/ 08 марта 2012

Вы можете сохранить и прочитать настройки, как и все расширенные программы в реестре, и вот как это сделать:

Public Function GetRegistryValue(ByVal KeyName As String, Optional ByVal DefaultValue As Object = Nothing) As Object
        Dim res As Object = Nothing
        Try
            Dim k = My.Computer.Registry.CurrentUser.OpenSubKey("Software\YourAppName", True)
            If k IsNot Nothing Then
                res = k.GetValue(KeyName, DefaultValue)
            Else
                k = My.Computer.Registry.CurrentUser.CreateSubKey("Software\YourAppName")
            End If
            If k IsNot Nothing Then k.Close()
        Catch ' ex As Exception
            'PromptMsg(ex)
        End Try
        Return res
    End Function

    Public Sub SetRegistryValue(ByVal KeyName As String, ByVal _Value As Object)
        Try
            Dim k = My.Computer.Registry.CurrentUser.OpenSubKey("Software\YourAppName", True)
            If k IsNot Nothing Then
                k.SetValue(KeyName, _Value)
            Else
                k = My.Computer.Registry.CurrentUser.CreateSubKey("Software\YourAppName")
                k.SetValue(KeyName, _Value)
            End If
            If k IsNot Nothing Then k.Close()
        Catch ' ex As Exception
            'PromptMsg(ex)
        End Try
    End Sub

Или даже больше, вы можете создать сериализуемый класс ( [Serializable ()] attrib), который содержит все ваши настройки в качестве свойств, затем сохранить его в каталоге приложения с помощью класса BinaryFormatter.

  Public Sub saveBinary(ByVal c As Object, ByVal filepath As String)
        Try
            Using sr As Stream = File.Open(filepath, FileMode.Create)
                Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
                bf.Serialize(sr, c)
                sr.Close()
            End Using
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Function loadBinary(ByVal path As String) As Object
        Try
            If File.Exists(path) Then
                Using sr As Stream = File.Open(path, FileMode.Open)
                    Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
                    Dim c = bf.Deserialize(sr)
                    sr.Close()
                    Return c
                End Using
            Else
                Throw New Exception("File not found")
            End If
        Catch ex As Exception
            Throw ex
        End Try
        Return Nothing
    End Function
0 голосов
/ 06 марта 2014

Проверьте этот пост из. Вы просто обращаетесь к настройкам области приложения следующим образом:

Properties.Settings.Default["SomeProperty"] = "Some Value";
Properties.Settings.Default.Save(); // Saves settings in application configuration file

работал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...