حفظ إعدادات البرنامج

مقدمة:
ستحتاج كثيراً في برامجك إلى حفظ بعض الاعدادات الخاصة بالبرنامج, فمثلاً قد تضع في برنامجك خيار للمستخدم يستطيع من خلاله تغيير لون الفورم ولكن بعد ان يقوم المستخدم بتغيير لون خلفية الفورم والخروج من البرنامج ثم العودة إليه مجدداً, ستجد ان لون الفورم عاد إلى اللون الافتراضي وذلك لأنك لم تقم بحفظ اللون الجديد الذي اختاره المستخدم.

طبعاً يمكنك حفظ إعدادات البرنامج عن طريق الريجستري, ولكن في هذا الدرس سنتعلم ,,
كيف تقوم بحفظ مثل تلك البيانات How To Save Program Settings in Visual Studio:

screenshot of our example


1-    إنشاء الإعدادات التي تريد حفظها:
لإنشاء الاعدادات نذهب إلى نافذة Solution Explorer ومنها نختار Properties ثم نضغط ضغط مزدوج على Settings. ستظهر لك النافذة التالية:
1-      قم بإضافة اسم الاعداد
2-      اختر نوع القيمة التي ستحفظ بها هذا الاعداد (نص, لون, رقم ....)
3-      اختار مجال او نطاق هذا الاعداد (اختر منها User)
4-      كتابة القيمة الافتراضية لهذا الاعداد

How to open Settings designer

example of how we create settings in Settings Designer
شرح الخطوة السابقة:
1-      Name: اسم للخاصية التي تريد حفظ قيمتها فمثلاً عندما تريد حفظ لون الخلفية للفورم نكتب مثلاً BackColor وطبعاً هو اسم اختياري اي يمكنك تسميته باي اسم تريد.
2-      Type: نوع القيمة التي ستخزن بها القيمة التي تريد حفظها فمثلاً لحفظ اللون نختار Color ولحفظ قيمة نصية نختار String وهكذا .....
3-      Scope: المجال او النطاق لهذا الاعداد وهناك قيمتين فقط لهذه الخاصية هما: Application,User الفرق بينهما هو:
a.      الإعدادات من النطاق Application تخزن على هيئة ملف XML توجد في الملف app.exe.config التابع لمشروعك وهي تكون للقراءة فقط اي لا تستطيع تغيير قيمتها بعد إنشاءها.
b.      اما الاعدادات من النطاق User فهي تخزن في الملف user.config التابع لمشروعك وهي على عكس النوع الاول قابلة للتعديل وهو ما نحتاجه وكما هو واضح من اسمها User اي مخصصة لحفظ اعدادات المستخدم الذي يعمل على برنامجك.
4-      Value: القيمة الافتراضية لهذا الاعداد وهي اختيارية ولكن يفضل وضع قيمة افتراضية للإعدادات التي تحفظها.
2-    التعامل مع الاعدادات من خلال الكود:
1-      كود تحميل الاعدادات:
private void LoadSettings()
{
    txtName.Text = Properties.Settings.Default.userName;
    txtEmail.Text = Properties.Settings.Default.email;

    cboColor.Text = Properties.Settings.Default.backColor.Name;
    this.BackColor = Properties.Settings.Default.backColor;
}
الشرح:
نستطيع الوصول إلى الاعدادات التي انشئناها في الخطوة السابقة عن طريق فضاء الاسماء  Properties وثم من الكلاس Settings وثم من الخاصية Default والتي تحوي اوامر التعامل مع الاعدادات. قمنا بعمل تابع يقوم بجلب قيم الاعدادات حيث يجب استدعاءه في حدث Form_load من اجل تحميل الاعدادات مع تشغيل الفورم.
Properties.Settings.Default.backColor.Name
2-      كود حفظ الاعدادات:
private void btnSave_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.userName = txtName.Text;
    Properties.Settings.Default.email = txtEmail.Text;
    Properties.Settings.Default.backColor = this.BackColor;

    Properties.Settings.Default.Save();
}
الشرح:
لحفظ الاعدادات التي اختارها المستخدم نقوم باسنادها إلى القيم الجديدة ثم نقوم بتنفيذ الامر Save الموجود في الخاصية Default والتابعة للكلاس Settings وذلك من اجل حفظ الاعدادات الجديدة.
Properties.Settings.Default.Save();
3-      كود إعادة الاعدادات إلى قيمها الافتراضية:
private void btnReset_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.Reset();
    LoadSettings();
}
الشرح:
فقط نقوم باستدعاء الامر Reset الموجود في الخاصية Default والتابعة للكلاس Settings من اجل إلغاء التعديلات وإعادة القيم الافتراضية إلى جميع الاعدادات. وبعد ذلك نقوم بإعاداة تحميل الاعدادات من اجل رؤية التغييرات عن طريق استدعاء التابع LoadSettings الذي قمنا بكتابته في البداية.
Properties.Settings.Default.Reset();
4-      كود إعادة تحميل الاعدادات:
private void btnReload_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.Reload();
    LoadSettings();
}
الشرح:
الفرق بين التابع Reload والتابع  Reset هو ان التابع Reset كما رأينا انه يعيد قيم الاعدادات إلى القيم الافتراضية وإلغاء كافة القيم الجيدة اما التابع Reload فهو يقوم بإعادة قيم الإعدادات إلى القيم المحفوظة اي اذا قمنا بعمل تعديلات على الاعدادات ولكننا لم نحفظها بالامر Save فإننا نستطيع إستعادة القيم المحفوظة عن طريق هذا الامر Reload.

this digram show you differnce between Reload() and Reset() functions


2 تعليقات

السلام عليكم
جزاك الله خيرا على الشرح
بس هناك مشكلة عند الضغط على زر تحميل الاعدادات لا يحدث أي تغيير نهائيا؟! فما السبب
وشكرا

رد

ارجو ان تشرح مشكلتك بشكل أفضل طي استطيع مساعدتك

رد

إرسال تعليق