2012-03-08 12 views
5

io avendo alcuni problemi con il salvataggio delle impostazioni dell'applicazione durante la fase di esecuzione ...di winform Impostazioni applicazione: non è possibile salvare le impostazioni delle applicazioni che è stato aggiunto durante la fase di esecuzione

Se cambio la portata della regolazione per l'utente, funziona benissimo , ma a portata di applicazione, anche se nulla è successo ...

ho usato:

Properties.Settings.Default.Save(); 

tutte le idee?

grazie

+1

In base alla progettazione, solo le impostazioni con ambito Utente possono essere modificate dal codice. È possibile modificare le impostazioni dell'ambito dell'applicazione modificando il file .config. Che normalmente richiede i privilegi di amministratore per ottenere l'accesso in scrittura al file. –

risposta

10

Questo perché impostare l'ambito su Applicazione lo rende di sola lettura.

Vedi Using Settings in C#

impostazioni Application-ambito sono di sola lettura, e possono essere modificati solo in fase di progettazione o modificando il file exe.config tra le sessioni di applicazione. Le impostazioni per l'ambito utente, tuttavia, possono essere scritte in fase di esecuzione, proprio come cambieresti qualsiasi valore di proprietà. Il nuovo valore persiste per la durata della sessione dell'applicazione. È possibile mantenere le modifiche alle impostazioni utente tra le sessioni dell'applicazione chiamando il metodo Settings.Save.

1

È possibile salvare e leggere l'impostazione come tutti i programmi avanzati nel Registro di sistema, e che è come farlo:

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 

o anche di più si può fare una classe serializzabile ([Serializable()] attrib che contiene tutte le impostazioni come proprietà, quindi salvarlo nella directory dell'app, con la classe 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

forse non mi sono spiegato correttamente, non sto usando Registry, ma Properties.Settings.Default.Save(); – Igal

+0

No, so che 'Properties.Settings' è pain, quindi do altre 2 scelte per salvare l'impostazione dell'app: Registro o file binario –

+0

oh, capisco :) ma questo tipo di problema ... l'applicazione era già implementata usando Properties.Settings quindi non posso cambiarlo ora – Igal

0

Verificare this post out. Si fa semplicemente riferimento alle impostazioni dell'ambito dell'applicazione come segue:

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

Ha funzionato per me.