شاطر
اذهب الى الأسفل
عدد المساهمات : 134
تاريخ التسجيل : 08/10/2012
معاينة صفحة البيانات الشخصي للعضو

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

في الأربعاء فبراير 06, 2013 4:48 pm
لطريقة الأولى : استخدام ملف نصي

تعد من اسهل الطرق
مشكلتها : يمكن حفظ إعداد واحد فقط في كل ملف نصي في شكل الكود البسيط
لكن ممكن بتعديل وتعقيد الاكواد أن يتم حفظ أكثر من إعداد واحد في كل ملف نصي واحد

لكن هنا سنستخدم الكود البسيط والذي يشمل القراءة من ملف نصي والكتابة إلى ملف نصي

في المثال الخاصية التي أريد حفظ تعديلها هي حالة النافذة التي تقبل ثلاث قيم (كبيرة , مصغرة , عادية ) وتمثلها دلالة
Me.WindowState

كود الكتابة إلى ملف نصي (حتى لو لم يكن الملف موجود مسبقاً فسيتم إنشاءه تلقائياً )

الكود:

My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\txt1.txt", Me.WindowState, False)
تقوم باستحضار مسار مجلد البرنامج
txt1.txt أسم الملف النصي (يحدد من قبل المبرمج )
فهذا يعني أن

Application.StartupPath & "\txt1.txt" هي مسار الملف النصي

Me.WindowState هي القيمة التي نريد كتابتها في الملف النصي (وتكون القيمة عدد صحيح )

False وتعني أننا نريد مسح كافة محتويات الملف النصي قبل الكتابة ,, أما لو أستخدمنا True فكان النص سيتراكم ولن نحصل على فائدة (تستخدم True في هذا الدوال في غير أماكن )


أما كود القراءة من ملف نصي فسيكون

الكود:

My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\txt1.txt") 
وهو كقيمة سيتم أنسابها إلى خاصية حالة النافذة فيصبح الكود
الكود:

Me.WindowState = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\txt1.txt") 
الآن يجب وضع أوامر كبح في حالة حذف هذا الملف النصي من قبل المستخدم ( لأن ذلك سيسبب مشاكل ورسائل خطأ قد تزعج المستخدم أو تعطل عمل البرنامج من الأساس )

أمر الكبح هنا هو جملة شرطية تراقب هل الملف موجود او لا

بعد التعرف على الأكواد لنضع الآن الأكواد في أحداثها

اولاً في كود تحميل الفورم Form1_Load نضع
الكود:


If My.Computer.FileSystem.FileExists(Application.StartupPath & "\txt1.txt") = True Then
Me.WindowState = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\txt1.txt")
Else
My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\txt1.txt", Me.WindowState, True)
End If 
ومعنى الكود ,, أذا الملف النصي والذي مساره وأسمه كذا موجود ,,قم بأنساب قيمة الملف النصي إلى خاصية حالة النافذة
أما أذا لم يكن موجود فقم بكتابة الملف وانسب له قيمة حالة الشاشة الافتراضية

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

من الممكن استخدامها في مجال تفعيل البرنامج أو جعل البرنامج تجريبي ,لكن في موضوعنا هذا سنشرح عن استخدامها في مجال حفظ الأعدادت


كود الكتابة العام في الريجستير سيكون من هذا الشكل

والآن في حدث إغلاق الفورم Form1_FormClosed نكتب
الكود:

My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\txt1.txt", Me.WindowState, False) 
وتعني أنساب قيمة خاصية حالة النافذة إلى الملف النصي مع حذف القيمة السابقة (في حالة تغيرت القيمة أم لم تتغير )


هذا هو الاستخدام البسيط والسهل للملف النصي لحفظ الإعدادت
الكود:

  My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\tarik", "arbtech", a) 
HKEY_CURRENT_USER\Software\tarik تمثل مسار المفتاح في الريجستير
ويجب دائماً أن تبدأ بقاعدة من الريجستر مثل HKEY_CURRENT_USER أما التالي فهو من أختيار المبرمج

arbtech تمثل أسم المفتاح ,, ويمكن في مسار مفتاح واحد وضع أكثر من اسم مفتاح وتخصيص قيمة لكل منها

a تمثل القيمة التي نريد كتابتها في هذا المفتاح

عند تنفيذ هذا الأمر سيتم أنشاء المفتاح في الريجستر وأنساب القيمة a له


الآن كود القراءة العام في الريجستير
الكود:

My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\tarik", "arbtech", "0")
طبعاً هو كقيمة مسندة ستكون
والخاصية التي نريد حفظ التعديلات عليها هي حالة النافذة أيضا لذلك سيكون الكود من الشكل
الكود:

Me.WindowState = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\tarik", "arbtech", "0") 
مسار المفتاح و أسم المفتاح هو نفسه في كود الكتابة
القيمة 0 هي القيمة التي أريد من الكود كتابتها في حال لم يجد المفتاح ,,إذاً منه نجد أن الكود السابق هو قراءة وكتابة وأمر كبح أيضاً (معالجة الاستثناءات )

الآن لنضع الاكواد في الأحداث المناسبة

في حدث تحميل الفورم Form1_Load نضع كود القراءة
الكود:

Me.WindowState = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\tarik", "arbtech", "0") 
في حدث إغلاق الفورم Form1_FormClosed سنضع كود الكتابة (كتابة قيمة حالة النافذة إلى المفتاح في الريجستير )
الكود:

Dim a As Integer = Me.WindowState
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\tarik", "arbtech", a) 

طريقة الثالثة : قواعد البيانات
يمكن حفظ كمية كبيرة جداً من الأعدادات في قواعد البيانات
حيث يتم أنشاء قاعدة منفصلة عن القاعدة الاساسية للبرنامج (أو حتى في القاعدة الاساسية يمكن انشاء جدول للأعدادات ) ويتم حفظ القيم في حقول في هذا الجدول مع إغلاق الفورم ويتم استدعاء هذه القيم مع تحميل الفورم

الطريقة متطورة وتتيح للمستخدم خيارات رائعة (في حال استخدمها المبرمج ) وتتيح للمبرمج السهولة أيضاً
يصبح بالأمكان حفظ ألوان النوافذ أو السمات المطبقة وحتى صورة شعار يحددها المستخدم والكثير

أكواد هذه الطريقة لن يتم شرحها والسبب هي أكواد الـ ADO.net نفسها أو أكواد الاتصال عن طريق المعالج وهذه الأكواد مشروحها في قسمها المخصص في المنتدى


يتبقى لنا أهم طريقة وهي My.Settings

الطريقة الرابعة : My.Settings

وهي طريقة نوعية مقدمة من بيئة التصميم نفسها (الفيجوال ستديو )

أولاً يجب التصريح عن المتغيرات التي نريد أنساب قيم الأعدادات لها

يتم ذلك بالأنتقال إلى خصائص المشروع من

Project >>> Project name properties
أو باختيار My Project من متصفح ملفات المشروع Solution

بعد ذلك نختار Settings



الآن نضع في الجدول التصريح عن المتغير الخاص بالأعدادت

حيث

Name هي أسم المتغير وسيكون في هذا المثال arbtech
type هي نوع المتغير ( سلسلة نصية ,, عدد صحيح ,, عبارة أتصال ...إلخ ) وسيكون في مثالنا Integer

Scope وسنختارها User

Value وهي القيمة الأفتراضية لأول مرة يعمل فيها البرنامج ولولاها لشاهدنا رسالة خطأ تفيد بعدم تطابق القيمة المنسوبة إلى الاعداد ,, وفي المثال ستكون القيمة الأفتراضية =0




الآن نكتب الاكواد ( الأعداد الذي أريد حفظه هو حالة النافذة عند الأغلاق والتي تقبل ثلاث قيم )

في حدث تحميل الفورم سنضع الكود
الكود:

Me.WindowState = My.Settings.arbtech
حيث arbtech هو أسم المتغير (يحدد من قبل المبرمج )

في حدث إغلاق الفورم سنضع الكود التالي
الكود:

My.Settings.arbtech = Me.WindowState 
تكمن أهمية هذه الطريقة لانها طريقة سهلة ومقدمة من البيئة نفسها ولا تحتاج لملفات خارجية مرفقة مع المشروع
وأكوادها بسيطة
والأهم هو بأستخدام هذه الطريقة يمكن التعديل على عبارة الاتصال الموجودة في حالة الاتصال بقواعد البيانات عن طريق المعالج
ونحتاج إلى هذا التعديل عند توزيع القاعدة على مخدم والبرنامج على أكثر من جهاز

لكن العملية هنا تختلف قليلاً لأن عبارة الأتصال هي للقراءة فقط ولايمكن حفظ التعديل فيها لذلك ستكون بهذا الشكل (في حدث تحميل الفورم الرئيسية أو الأبوية )
الكود:

My.Settings("arbtech") = d 
حيث وعلى فرض المثال arbtech هو أسم المتغير الحاوي على جملة الاتصال
d هو المتغير المحفوظ والمنسوب إليه عبارة الاتصال الجديدة

_________________
[img] [/img]
الرجوع الى أعلى الصفحة
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى