2008-09-08 2 views
25

में डिफ़ॉल्ट एप्लिकेशन सेटिंग्स पढ़ना मेरे कस्टम ग्रिड नियंत्रण के लिए मेरे पास कई एप्लिकेशन सेटिंग्स (उपयोगकर्ता स्कोप में) हैं। उनमें से ज्यादातर रंग सेटिंग्स हैं। मेरे पास एक ऐसा फॉर्म है जहां उपयोगकर्ता इन रंगों को कस्टमाइज़ कर सकता है और मैं डिफ़ॉल्ट रंग सेटिंग्स में वापस जाने के लिए एक बटन जोड़ना चाहता हूं। मैं डिफ़ॉल्ट सेटिंग्स कैसे पढ़ सकता हूं?सी #

उदाहरण के लिए:

  1. मैं एक उपयोगकर्ता Properties.Settings में CellBackgroundColor नामित सेटिंग है।
  2. डिज़ाइन समय पर मैंने IDE का उपयोग करके CellBackgroundColor से Color.White का मान सेट किया।
  3. उपयोगकर्ता अपने कार्यक्रम में CellBackgroundColorColor.Black पर सेट करता है।
  4. मैं Properties.Settings.Default.Save() के साथ सेटिंग्स को सहेजता हूं।
  5. उपयोगकर्ता Restore Default Colors बटन पर क्लिक करता है।

अब, Properties.Settings.Default.CellBackgroundColorColor.Black देता है। मैं Color.White पर वापस कैसे जा सकता हूं?

उत्तर

33

@ozgur,

Settings.Default.Properties["property"].DefaultValue // initial value from config file 

उदाहरण:

string foo = Settings.Default.Foo; // Foo = "Foo" by default 
Settings.Default.Foo = "Boo"; 
Settings.Default.Save(); 
string modifiedValue = Settings.Default.Foo; // modifiedValue = "Boo" 
string originalValue = Settings.Default.Properties["Foo"].DefaultValue as string; // originalValue = "Foo" 
+0

scalars के लिए यह केवल काम करता है:

मैं एक विस्तार विधि है कि मेरे उद्देश्यों के लिए उपयुक्त था लिखा था। मेरे पास एक ऐसी संपत्ति है जो सिस्टम प्रकार है। चयन। विशेषीकृत। स्ट्रिंगकोलेक्शन। उपरोक्त का उपयोग कच्चे एक्सएमएल को लौटाता है, जिसके लिए आपको इसे चुनना और मैन्युअल रूप से संग्रह बनाना आवश्यक है। –

1

मैं कलर पर कैसे जाउंगा। व्हाइट?

दो तरीके जिनसे आप कर सकते हैं:

  • सेटिंग्स की एक प्रतिलिपि सहेजें उपयोगकर्ता से पहले ही बदल जाता है।
  • उपयोगकर्ता संशोधित सेटिंग्स को कैश करें और इसे बंद करने से पहले गुणों को सेट करें। सेटिंग्स बंद होने से पहले।
1

मैं सेटिंग्स के 2 सेट होने से इस समस्या दौर मिल गया है। मैं उस दृश्य का उपयोग करता हूं जो विजुअल स्टूडियो वर्तमान सेटिंग्स के लिए डिफ़ॉल्ट रूप से जोड़ता है, यानी Properties.Settings.Default। लेकिन मैं अपनी परियोजना में एक और सेटिंग्स फ़ाइल भी जोड़ता हूं "प्रोजेक्ट -> नई आइटम जोड़ें -> सामान्य -> ​​सेटिंग्स फ़ाइल" और वहां वास्तविक डिफ़ॉल्ट मानों को स्टोर करें, यानी Properties.DefaultSettings.Default

मैं तब सुनिश्चित करता हूं कि मैंने कभी भी Properties.DefaultSettings.Default सेटिंग्स पर नहीं लिखा है, बस इसे पढ़ें। डिफ़ॉल्ट मानों पर वापस सबकुछ बदलना तब मौजूदा मानों को डिफ़ॉल्ट मानों पर वापस सेट करने का एक मामला है।

+0

मैं भी, इस दृष्टिकोण पसंद करते हैं {Settings.Default.Properties [ "फू"] स्ट्रिंग के रूप में} बुला एक अपवाद में परिणाम कर सकते, तो सेटिंग्स का नाम बदल दिया गया है के बाद से। इसके अलावा, कास्टिंग विफल हो सकता है। मैं डेटा का डुप्लिकेट (उपयोगकर्ता डिफ़ॉल्ट और एप्लिकेशन को डिफ़ॉल्ट) और प्रकार सुरक्षा के बीच लगता है, दोहराव कम बुराई यहाँ –

+0

BTW है, सुनिश्चित करें कि आप कभी नहीं डिफ़ॉल्ट सेटिंग्स पर लिखना आसान है बनाने - वहाँ सभी सेटिंग्स बनाने के आवेदन scoped, बजाय उपयोगकर्ता scoped –

10

पढ़ना "विंडोज 2।

ApplicationSettingsBase.Reload

ApplicationSettingsBase.Reset

MSDN से::

पुनः लोड है कि में रीसेट के विपरीत 0 फार्म प्रोग्रामिंग ", मैं इन 2 उपयोगी तरीकों कि इस संदर्भ में मदद की हो सकती है पर ठोकर खाई पूर्व बचाया आवेदन सेटिंग्स मूल्यों के अंतिम सेट लोड होगा, जबकि बाद बचाया मूलभूत मूल्यों लोड होगा ।

तो उपयोग होगा:

Properties.Settings.Default.Reset() 
Properties.Settings.Default.Reload() 
+0

मुझे लगता है "फिर से लोड करें कि में रीसेट के विपरीत पूर्व, बचाया आवेदन सेटिंग्स मूल्यों के अंतिम सेट लोड होगा जबकि बाद बचाया मूलभूत मूल्यों लोड होगा।" हमेशा सच नहीं है। जैसे इसके बाद। फिर से सहेजें .सेट, .Reload द्वारा सहेजे गए सेट को लोड नहीं करता है। सेव - इसका कोई प्रभाव नहीं है। – ChrisJJ

+0

क्या होगा यदि आप केवल एक सेटिंग रीसेट करना चाहते हैं और उनमें से सभी नहीं? –

+0

@KyleDelaney उपरोक्त उत्तर की तरह दिखता है (https://stackoverflow.com/a/49289/67824)। –

2

Properties.Settings.Default.Reset() मूल मूल्य के लिए सभी सेटिंग्स को रीसेट होगा।

4

इम वास्तव में यकीन नहीं इस के लिए आवश्यक है, एक neater तरीका होना चाहिए, नहीं तो किसी को इस उपयोगी पाता आशा;

public static class SettingsPropertyCollectionExtensions 
{ 
    public static T GetDefault<T>(this SettingsPropertyCollection me, string property) 
    { 
     string val_string = (string)Settings.Default.Properties[property].DefaultValue; 

     return (T)Convert.ChangeType(val_string, typeof(T)); 
    } 
} 

उपयोग;

var setting = Settings.Default.Properties.GetDefault<double>("MySetting"); 
+0

+1 मैंने अपना उत्तर लिखते समय संदर्भ के रूप में आपके उत्तर का उपयोग किया। –

0

मैंने पाया कि बुला ApplicationSettingsBase.Reset उनके डिफ़ॉल्ट मानों के सेटिंग रीसेट, लेकिन यह भी उन्हें एक ही समय में बचत का असर होगा।

व्यवहार मैं चाहता था उन्हें पुनर्स्थापित करने के लिए सामान्य मानों पर, लेकिन उन्हें (ताकि यदि उपयोगकर्ता चूक पसंद नहीं था, जब तक वे बचा लिया गया है कि वे उन्हें वापस लौटने सकता है) को बचाने के लिए नहीं था।

using System; 
using System.Configuration; 

namespace YourApplication.Extensions 
{ 
    public static class ExtensionsApplicationSettingsBase 
    { 
     public static void LoadDefaults(this ApplicationSettingsBase that) 
     { 
      foreach (SettingsProperty settingsProperty in that.Properties) 
      { 
       that[settingsProperty.Name] = 
        Convert.ChangeType(settingsProperty.DefaultValue, 
             settingsProperty.PropertyType); 
      } 
     } 
    } 
}