2012-03-08 11 views
5

मैं रन टाइम के दौरान अनुप्रयोग सेटिंग्स की बचत के साथ कुछ समस्याएं हो रही ...WinForm के आवेदन सेटिंग्स: जो रन टाइम के दौरान जोड़ा गया है आवेदन सेटिंग नहीं सहेज सकते

तो मैं उपयोगकर्ता के लिए सेटिंग गुंजाइश बदलने के लिए, यह ठीक काम करता है है, लेकिन आवेदन दायरे में, कुछ भी नहीं हुआ जा रहा है ...

मैं का उपयोग किया है:

Properties.Settings.Default.Save(); 

किसी भी विचार?

धन्यवाद

+1

डिज़ाइन द्वारा, केवल उपयोगकर्ता स्कोप वाले सेटिंग्स को आपके कोड द्वारा संशोधित किया जा सकता है। आप .config फ़ाइल को संपादित करके एप्लिकेशन स्कोप सेटिंग्स बदलते हैं। फ़ाइल में लेखन पहुंच प्राप्त करने के लिए आमतौर पर व्यवस्थापक विशेषाधिकारों की आवश्यकता होती है। –

उत्तर

10

ऐसा इसलिए है क्योंकि एप्लिकेशन के दायरे को सेट करना इसे केवल पढ़ने के लिए बनाता है।

देखें Using Settings in C#

आवेदन-गुंजाइश सेटिंग केवल पढ़ने के लिए कर रहे हैं, और केवल डिजाइन समय में या आवेदन सत्र के बीच में .exe.config फ़ाइल बदलकर बदला जा सकता है। उपयोगकर्ता-स्कोप सेटिंग्स, हालांकि, रन टाइम पर लिखी जा सकती हैं, जैसे आप किसी भी संपत्ति मूल्य को बदल देंगे। नया मान एप्लिकेशन सत्र की अवधि के लिए जारी रहता है। आप सेटिंग सत्रों को कॉल करके एप्लिकेशन सत्रों के बीच उपयोगकर्ता सेटिंग्स में परिवर्तनों को जारी रख सकते हैं।

1

आप को बचाने और रजिस्ट्री में सभी उन्नत कार्यक्रमों की तरह स्थापित करने के पढ़ सकते हैं, और यह है कि यह कैसे करना है यह है:

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 वर्ग ([Serializable कर सकते हैं()] attrib) जिसमें गुणों के रूप में आपकी सभी सेटिंग्स शामिल हैं, फिर बाइनरीफॉर्मेटर क्लास के साथ इसे अपनी ऐप निर्देशिका में सहेजें।

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

शायद मैंने खुद को ठीक से समझाया नहीं है, मैं रजिस्ट्री का उपयोग नहीं कर रहा हूं, लेकिन Properties.Settings.Default.Save(); – Igal

+0

नहीं, मुझे पता है कि 'Properties.Settings' दर्द है इसलिए मैं आपको ऐप सेटिंग सहेजने के लिए 2 अन्य विकल्प देता हूं: रजिस्ट्री या बाइनरी फ़ाइल –

+0

ओह, मैं देखता हूं :) लेकिन यह मुझे समस्या है ... एप्लिकेशन पहले ही लागू हो चुका था Properties.Settings का उपयोग करके, इसलिए मैं इसे अभी नहीं बदल सकता – Igal

0

this post देखें। तुम सिर्फ इस तरह आवेदन scoped सेटिंग देखें:

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

मेरे लिए काम किया।

संबंधित मुद्दे