سؤال

لدي عدد من إعدادات التطبيق (في نطاق المستخدم) على عادتي التحكم الشبكة.معظمهم من إعدادات الألوان.لقد شكل حيث يمكن للمستخدم تخصيص هذه الألوان و أريد أن أضيف زر العودة إلى الافتراضي إعدادات الألوان.كيف يمكنني قراءة الإعدادات الافتراضية?

على سبيل المثال:

  1. لدي المستخدم تحديد اسمه CellBackgroundColor في Properties.Settings.
  2. في تصميم مجموعة قيمة من CellBackgroundColor إلى Color.White باستخدام IDE.
  3. المستخدم مجموعات CellBackgroundColor إلى Color.Black في برنامجي.
  4. لقد حفظ الإعدادات مع Properties.Settings.Default.Save().
  5. ينقر المستخدم على Restore Default Colors زر.

الآن ، Properties.Settings.Default.CellBackgroundColor يعود Color.Black.كيف أعود إلى Color.White?

هل كانت مفيدة؟

المحلول

@اوزكار

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"

نصائح أخرى

القراءة "ويندوز 2.0 نماذج البرمجة", أنا تعثرت على هذه 2 الأساليب المفيدة التي يمكن أن تساعد في هذا السياق:

ApplicationSettingsBase.تحميل

ApplicationSettingsBase.إعادة تعيين

من MSDN:

تحميل يتناقض مع إعادة تعيين في ذلك السابق سيتم تحميل آخر مجموعة من حفظ إعدادات التطبيق القيم ، في حين أن هذا الأخير سيتم تحميل المحفوظة القيم الافتراضية.

وبالتالي فإن استخدام ليكون:

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

أنا لست متأكد من أن هذا ضروري يجب أن يكون هناك أكثر إتقانا الطريق ، وإلا نأمل شخص ما تجد هذه مفيدة ؛

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");

Properties.Settings.Default.Reset() سيتم إعادة تعيين كافة الإعدادات إلى قيمتها الأصلية.

لدي جولة هذه المشكلة من خلال وجود مجموعات 2 من الإعدادات.أنا استخدم واحد Visual Studio يضيف افتراضيا الإعدادات الحالية ، أي Properties.Settings.Default.ولكن أنا أيضا إضافة آخر إعدادات ملف إلى مشروع "Project -> إضافة عنصر جديد -> عام -> إعدادات ملف" و مخزن الفعلية القيم الافتراضية هناك أي Properties.DefaultSettings.Default.

ثم تأكد من أن لم أكتب Properties.DefaultSettings.Default إعدادات مجرد قراءة منه.تغيير كل شيء مرة أخرى إلى القيم الافتراضية ثم مجرد حالة من الإعداد الحالي القيم إلى القيم الافتراضية.

كيف أعود إلى اللون.الأبيض ؟

اثنين من الطرق التي يمكنك القيام به:

  • حفظ نسخة من الإعدادات قبل المستخدم التغييرات.
  • ذاكرة التخزين المؤقت للمستخدم تعديل إعدادات وحفظه إلى خصائص.الإعدادات قبل إغلاق التطبيق.

وجدت أن الدعوة 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);
            }
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top