التحقق من صحة بيانات التحكم عن طريق الحد من التركيز
يتم استخدام حدث التحقق من الصحة والخاصية CausesValidation جنبًا إلى جنب لتأكيد الإدخال إلى عنصر التحكم قبل السماح للمستخدم بنقل التركيز بعيدًا عن عنصر التحكم. على سبيل المثال: خذ بعين الاعتبار تطبيقًا يحتوي على عدة مربعات نص وزر تعليمات. عندما يتلقى كل مربع نص التركيز، فإنك تريد منع المستخدم من نقل التركيز حتى يتم استيفاء معايير التحقق الخاصة بمربع النص، ومع ذلك، فأنت تريد أيضًا السماح بـ المستخدم لتحريك التركيز عندما يتلقى مربع النص التركيز، ويمكن النقر فوق الزر "تعليمات" في أي وقت. للقيام بذلك، قم بتعيين معايير التحقق من الصحة في حدث التحقق من الصحة وقم بتعيين الخاصية CausesValidation لزر التعليمات إلى False. إذا تم تعيين الخاصية إلى True (الإعداد الافتراضي)، فسيقع حدث التحقق من الصحة على عنصر التحكم الأول. إذا تم تعيين الخاصية إلى False، فسيتم إجراء حدث التحقق من الصحة على عنصر التحكم الأول أولاً.
يعد حدث التحقق من الصحة أكثر ملاءمة للتحقق من صحة إدخالات البيانات من حدث LostFocus لأن حدث LostFocus (حسب التعريف) يحدث بعد نقل التركيز. بدلاً من ذلك، باستخدام حدث التحقق من الصحة، يمكنك منع التركيز من الانتقال إلى عنصر تحكم آخر حتى يتم استيفاء قواعد التحقق من الصحة.
الاستخدامات الممكنة
تحتاج تطبيقات إدخال البيانات إلى إجراء عملية تحقق من صحة إدخال البيانات أكثر تعقيدًا من عملية التحقق التي يوفرها عنصر التحكم MaskedEdit أو التي تحدث في قواعد العمل.
يحتاج النموذج إلى منع المستخدم من استخدام المفتاح TAB أو مفاتيح التسريع لتحريك عناصر التحكم حتى يتم إدخال البيانات في الحقل.
تحتاج مستندات ActiveX التي يتم تشغيلها في Internet Explorer إلى طريقة يمكن للمستخدم من خلالها إنهاء العمل على النموذج قبل أن يقوم البرنامج النصي بنقل التركيز برمجيًا.
التحكم في التركيز على التحقق من صحة الحدث
يتضمن حدث التحقق من الصحة معلمة keepfocus. عند تعيين المعلمة إلى True، يحتفظ عنصر التحكم بالتركيز. وهذا يمنع المستخدم بشكل فعال من النقر على عناصر التحكم الأخرى.
باستخدام مجموعة من الضوابط
مصفوفة التحكم هي مجموعة من عناصر التحكم ذات اسم ونوع شائعين. مسار الأحداث هو نفسه أيضًا. يجب أن تحتوي مصفوفة التحكم على عنصر واحد على الأقل، ويمكن زيادة عدد العناصر ضمن النطاق المسموح به بواسطة موارد النظام ويعتمد حجم المصفوفة أيضًا على الذاكرة وموارد Windows التي يتطلبها كل عنصر تحكم. الحد الأقصى لقيمة الفهرس المتاحة في صفيف التحكم هو 32767. العناصر الموجودة في نفس مصفوفة التحكم لها إعدادات خصائصها الخاصة. تتضمن الاستخدامات الشائعة لصفائف التحكم تنفيذ عناصر تحكم القائمة ومجموعات أزرار الخيارات.
لاحظ أن Visual Basic يتضمن القدرة على إضافة عناصر تحكم غير مرجعية بشكل حيوي إلى مجموعة عناصر التحكم في وقت التشغيل. يشير هذا الموضوع فقط إلى عناصر التحكم المرجعية التي تمت إضافتها في وقت التصميم عن طريق قص عنصر التحكم ولصقه في النموذج. لمزيد من المعلومات حول إضافة عناصر التحكم في وقت التشغيل، راجع المواضيع المرجعية "إضافة أسلوب (مجموعة عناصر التحكم)" و"إضافة أسلوب (مجموعة التراخيص)".
لماذا استخدام صفائف التحكم
في وقت التصميم، تستهلك إضافة عناصر تحكم باستخدام صفيف تحكم موارد أقل من إضافة عناصر تحكم متعددة من نفس النوع مباشرة إلى النموذج. تكون صفائف التحكم مفيدة أيضًا عندما تريد أن تقوم عدة عناصر تحكم بمشاركة التعليمات البرمجية. على سبيل المثال، إذا قمت بإنشاء مصفوفة تحكم تحتوي على ثلاثة أزرار خيارات، فسيتم تنفيذ نفس التعليمات البرمجية بغض النظر عن الزر الذي تم النقر فوقه.
لإنشاء مثيل جديد لعنصر التحكم في وقت التشغيل، يجب أن يكون عنصر التحكم الجديد عضوًا في صفيف عناصر التحكم. عند استخدام مصفوفة من عناصر التحكم، يرث كل عضو جديد إجراءات الحدث العام للمصفوفة.
ليس من الممكن إنشاء عناصر تحكم جديدة في وقت التشغيل باستخدام آلية صفيف التحكم، لأن كل عنصر تحكم جديد يرث إجراء الحدث المكتوب للمصفوفة. على سبيل المثال، إذا كان لديك عدة مربعات نص في النموذج الخاص بك، وكان كل مربع نص يقبل قيمة تاريخ، فيمكنك إنشاء صفيف من عناصر التحكم بحيث تشترك كافة مربعات النص في نفس رمز التحقق من الصحة.
نموذج التطبيق: Calc.vbp
يحتوي تطبيق نموذج الحاسبة الموضح في الشكل 7.2 (المدرج في دليل Samples!Alink(vbsamples)) على مصفوفتي تحكم — أزرار رقمية وأزرار إجراءات.
لاحظ كيف يستخدم المثال بناء جملة الكائن (الفهرس) للإشارة إلى كل عنصر تحكم. حدد قيمة الفهرس عند إنشاء عنصر التحكم. في الواقع، تحديد فهرس عشوائي لعنصر تحكم في وقت التصميم سيجعل عنصر التحكم جزءًا من مصفوفة.
تقوم خاصية الفهرس بتمييز العناصر الموجودة في صفيف التحكم. عندما يتعرف عنصر تحكم في الصفيف على حدث ما، يستدعي Visual Basic إجراء الحدث العام ويمرر معلمة (قيمة خاصية الفهرس) لتحديد عنصر التحكم الذي تعرف على الحدث.
على سبيل المثال، يبدو السطر الأول من التعليمات البرمجية في إجراء الحدث Number_Click كما يلي:
PRivateSubNumber_Click(IndexAsInteger)
إذا قام Number(0) بتعريف الحدث، فسيقوم VisualBasic بتمرير 0 كمعلمة فهرس، وإذا قام Number(1) بتعريف الحدث، فسيقوم VisualBasic بتمرير 1 كمعلمة فهرس. وبخلاف قيمة الفهرس، فإن بقية كود Number_Click الذي تم تنفيذه هو نفسه بالنسبة لـ Number(0) إلى Number(9).
إنشاء مجموعة التحكم في وقت التصميم
هناك ثلاث طرق لإنشاء صفائف التحكم في وقت التصميم:
1. أعط نفس الاسم لعناصر تحكم متعددة.
2. انسخ عنصر التحكم الموجود والصقه في النموذج.
3. قم بتعيين خاصية الفهرس لعنصر التحكم إلى قيمة غير فارغة.
لاحظ أنه يجب إنشاء مصفوفة التحكم في القائمة في محرر القائمة. لمزيد من المعلومات حول هذه العملية، راجع "إنشاء وتعديل القوائم في وقت التشغيل" في الفصل السادس، "إنشاء واجهة المستخدم".
لإضافة عنصر صفيف تحكم عن طريق تغيير اسم عنصر التحكم:
1. ارسم عنصر التحكم المراد إضافته في مصفوفة التحكم (يجب أن يكون من نفس نوع عنصر التحكم) لتحديد عنصر التحكم الذي سيكون العنصر الأول في المصفوفة.
2. حدد عنصر التحكم وقم بتغيير قيمة إعداد الاسم الخاص به إلى قيمة إعداد الاسم للعنصر الأول في المصفوفة.
3. عند إدخال اسم موجود لعنصر تحكم في الصفيف، سيعرض Visual Basic مربع حوار يطلب منك تأكيد ما إذا كنت تريد إنشاء صفيف التحكم. عند هذه النقطة حدد "موافق" لتأكيد العملية.
على سبيل المثال، إذا كان العنصر الأول في صفيف التحكم يسمى cmdCtlArr، فحدد CommandButton، وأضفه إلى الصفيف، وقم بتعيين اسمه إلى cmdCtlArr. في هذا الوقت، سيتم عرض الرسالة التالية: "عنصر تحكم يسمى 'cmdCtlArr'. موجود بالفعل. هل تريد إنشاء مجموعة من عناصر التحكم؟" حدد موافق لتأكيد العملية.
عناصر التحكم المضافة بهذه الطريقة تشترك فقط في خاصية الاسم ونوع التحكم؛ والخصائص الأخرى لها نفس القيم التي كانت عند رسم عنصر التحكم في الأصل.
لإضافة عنصر صفيف تحكم عن طريق نسخ عنصر تحكم موجود:
1. ارسم عناصر التحكم في صفيف التحكم.
2. عندما يتم التركيز على عنصر التحكم، حدد أمر "نسخ" في قائمة "تحرير".
3. في قائمة "تحرير"، حدد أمر "لصق". سيعرض Visual Basic مربع حوار يسألك عما إذا كان سيتم تأكيد إنشاء صفيف التحكم. حدد موافق لتأكيد العملية. قيمة الفهرس المخصصة لعنصر التحكم هي 1. عنصر التحكم الأول المرسوم له قيمة فهرس 0.
قيمة الفهرس لكل عنصر صفيف جديد هي نفس الترتيب الذي تمت إضافته به إلى صفيف التحكم. عند إضافة عنصر تحكم مثل هذا، يتم نسخ معظم الخصائص المرئية، مثل الارتفاع والعرض واللون، من عنصر التحكم الأول في الصفيف إلى عنصر التحكم الجديد.
إضافة مجموعة التحكم في وقت التشغيل
في وقت التشغيل، يمكنك استخدام عبارات التحميل والإلغاء لإضافة عناصر التحكم وإزالتها من صفيف التحكم، ومع ذلك، يجب أن يكون عنصر التحكم المضاف عنصرًا في صفيف تحكم موجود. يجب عليك إنشاء عنصر تحكم باستخدام خاصية الفهرس (في معظم الحالات) بقيمة 0 في وقت التصميم، ثم استخدام بناء الجملة التالي في وقت التشغيل:
عند تحميل عنصر جديد في مصفوفة تحكم، سيتم نسخ معظم إعدادات الخصائص من العنصر الموجود في المصفوفة بأصغر حرف منخفض - في هذه الحالة، العنصر ذو الفهرس 0. نظرًا لعدم نسخ إعدادات الخصائص Visible وIndex وTabIndex تلقائيًا إلى عناصر جديدة في صفيف التحكم، لكي يصبح عنصر التحكم المضاف حديثًا مرئيًا، يجب تعيين الخاصية Visible الخاصة به إلى True.
لاحظ أن Visual Basic سيقوم بإنشاء خطأ عند محاولة استخدام عبارة التحميل على قيمة فهرس موجودة بالفعل في الصفيف.
النقطة المهمة هي أنه يمكن استخدام عبارة Unload لحذف كافة عناصر التحكم التي تم إنشاؤها بواسطة عبارة Load ومع ذلك، لا يمكن لـ Unload حذف عناصر التحكم التي تم إنشاؤها في وقت التصميم، بغض النظر عما إذا كانت جزءًا من صفيف التحكم.
مخطط التحكم: إضافة وإزالة عناصر التحكم في صفيف التحكم
يتم توضيح كيفية إضافة عناصر التحكم وإزالتها في وقت التشغيل في مثال صفيف التحكم، حيث يكون عنصر التحكم زر خيار. وفقا لهذا المثال، يمكن للمستخدم إضافة أزرار الخيارات لتغيير لون خلفية مربع الصورة.
كما هو موضح في الشكل 7.3، ابدأ النموذج، ثم ارسم مربع صورة وتسمية وزري خيارات وثلاثة أزرار أوامر عليه.
التحكم في أحداث تطبيق المصفوفة
بعد ذلك، يجب عليك إضافة إجراءات الحدث لزر الخيار وزر الأمر. ابدأ التطبيق بعد إضافة إعلان النموذج:
DimMaxIdAsInteger
تشترك جميع أزرار الخيارات في إجراء حدث النقر:
PrivateSuboptButton_Click(IndexAsInteger)
picDisplay.BackColor=QBColor(الفهرس 1)
EndSub
قم بإضافة زر خيار جديد من خلال إجراء حدث النقر الخاص بزر الأمر "إضافة". في هذا المثال، قبل تنفيذ بيان التحميل، يتحقق الرمز للتأكد من عدم تحميل أكثر من عشرة أزرار خيارات. بعد تحميل عنصر التحكم، يجب تعيين الخاصية Visible الخاصة به إلى True.
PrivateSubcmdAdd_Click()
IfMaxId=0ThenMaxId=1 'تعيين كافة أزرار الخيارات.
IfMaxId>8ThenExitSub "يُسمح بعشرة أزرار فقط."
MaxId=MaxId 1 'يزداد عدد الأزرار.
LoadoptButton(MaxId) "إنشاء زر جديد."
optButton(0).SetFocus 'خيارات زر إعادة الضبط.
"ضع الزر الجديد أسفل الزر السابق."
optButton(MaxId).Top=optButton(MaxId-1)._
أعلى 400
optButton(MaxId).Visible=True 'إظهار الزر الجديد.
optButton(MaxId).Caption=Option&MaxId 1
EndSub
حذف زر خيار من خلال إجراء حدث النقر الخاص بزر أمر الحذف:
PrivateSubcmdDelete_Click()
IfMaxId<=1ThenExitSub 'احتفظ بالزرين الأولين.
UnloadoptButton(MaxId) "حذف الزر الأخير."
MaxId=MaxId-1 'ينخفض عدد الأزرار.
optButton(0).SetFocus 'خيارات زر إعادة الضبط.
EndSub
قم بإنهاء التطبيق من خلال إجراء حدث النقر فوق الزر "إغلاق":
PrivateSubcmdClose_Click()
UnloadMe
EndSub
->