الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحكم في التطبيقات

مغلق
بدأه cold0zero في 29 أغسطس 2004 · 2 رد · 1,225 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

التحكم في التطبيقات. هل يمكنك بناء عناصر تحكم مخصصة في Visual Basic .NET؟

استخدم مطورو Visual Basic عناصر التحكم Activex الخارجية بسهولة ويسر في التطبيقات مما وفر كثيرًا من الوظائف التي لم تكن في البرامج أو التطبيقات التي يعملون عليها عند محاولة حل مشكلة من المشكلات. تغير الحال الآن باستخدام Visual Basic. NET وأصبحت مسألة إنشاء عنصر تحكم مسألةً سهلة مما أتاح للمطورين أن ينشئوا عناصر التحكم المخصصة في أقل وقت ممكن.

يستهدف هذا المقال مناقشةً عامة لبعض الأسباب وراء اختيار عنصر تحكم مخصص أو كيف يمكن الاستفادة من ميزة التوارث في VB.NET في عملية تخصيص عناصر التحكم، وهل من الصعب إتقان عملية إنشاء عنصر تحكم بسيط واستخدامه؟. هذا ما سوف نراه في هذا المقال.

اهتم المطورون بمحاولة معرفة تصميم الكائنات الموجهه، وهل هذا الأمر يساعد في الوصول إلى تعليمة برمجية من الممكن إعادة استخدامها؟. اعتقد الكثير منهم أنه يمكن باستخدام توارث الفئة في C++ تمهيد الطريق إلى ذلك الأمر بعيد المنال. لكن الواقع غير ذلك حيث إن هذه فئات C++ صعبة الاستخدام ومخصصة لكل تطبيق تعمل فيه ويتم استخدام التعليمة البرمجية التي يمكن إعادة استخدامها على نطاق ضيق في نموذج موجود.

بعد أن ظهرت على السطح عناصر التحكم VBX، انجذب إليها المطورون انجذاب برادة الحديد إلى المغناطيس. وبمرور الوقت تطور VBX إلى OCX وظهرت عناصر تحكم خارجية حاولت سد العجز الموجود وأمكن استخدام التعليمة البرمجية المخصصة. وبظهور الإصدار VB5، اعتقد المطورون أن حلم إعادة استخدام التعليمة البرمجية على وشك أن يقبضوا عليه بين أيديهم وبدأو في إنشاء عناصر تحكم خاصة بهم لاحتواء التعليمة البرمجية الشائعة الاستخدام ومحاولة إخراج واجهة مستخدم قياسية لهذا الغرض.

مرة أخرى، لماذا نستخدم عناصر التحكم المخصصة؟

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

اعتقد أننا أسهبنا بعض الشيء والآن دعنا نركز على فوائد استخدام عناصر التحكم في التطبيقات. يتفق معظم العاملون في هذا المجال أن التعليمة البرمجية المعاد استخدامها يؤدي إلى تقليل الوقت المستخدم في عملية التطوير. وسنرى ذلك في التالي:

قد يحدث أثناء القيام بالتخطيط لتحديث التطبيقات الداخلية في إحدى الشركات، أن تقوم الإدارة بإملاء أوامر تفرض استخدام عناوين البريد الإلكتروني في جميع الاتصالات. سترى أن هذا الأمر سهل المنال بإنشاء عنصر التحكم مربع نص مع بعض التعليمة البرمجية البسيطة للتحقق من الصحة لكل نموذج. ومن الأمثلة الأخرى فقد يقوم فريق تطوير C++ والمسئول عن إجراء تغييرات لنظام المحاسبات في الشركة بكتابة جزء من تعليمة التحقق من الصحة البرمجية، بينما يقوم مسئول الموارد البشرية وتطبيقات صرف المرتبات بكتابة تعليمة برمجية أخرى. أي أن استخدام عنصر التحكم مربع النص كنقطة بداية وإضافة تعليمة برمجية للتحقق من الصحة للتأكد من تنسيق عنوان البريد الإلكتروني الذي يتم إدخاله ثم توزيع ذلك العنصر على كل من فريقي C++ وتطوير VB ليتم استخدامه في جميع التطبيقات ولذلك ستصبح مسألة التقييس في روتين التحقق من الصحة فقط ولكن في جزء واجهة المستخدم المتصل بإضافة عنوان البريد الإلكتروني.

قد يحدث أيضًا أن يتم إرسال من قسم الموارد البشرية يقول أن شاشة إدخال بيانات التطبيق تعتمد بعض العناوين الإلكترونية فقط والتي لها الملحقات .com و .net و .org وعدم السماح بإدخال عنوان جديد بالملحق .egy الجديد. وقد يقلق هذا الأمر الكثيرين ولكن القيام ببعض التعديلات وإعادة توزيع عنصر التحكم المتحقق من الصحة لعنوان البريد الإلكتروني، يجعل من السهل لفريق التطوير بتنفيذ هذا التغيير البسيط في جميع التطبيقات.

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

لكن ما هو مقدار الصعوبة تحديدًا في تطوير عناصر التحكم في Visual Basic .NET؟

تطوير عنصر التحكم المخصص

من أجل إتقان عناصر التحكم المخصصة باستخدام Visual Basic .NET، سنقوم بإنشاء عنصر التحكم البسيط ونخصصه لزيادة سرعة إدخال البيانات في الحقول التي تم التحقق من صحتها وتقليل الاعتماد على الماوس في تطبيقات إدخال البيانات ذات الحجم الكبير. ولذلك سنقوم بتخصيص عنصر التحكم القياسي ComboBox لاعتماد استكمال العبارة البرمجية بشكل تلقائي كما يكتبها المستخدم داخل عنصر التحكم. تابع الخطوات التالية:

1- افتح Visual Studio .NET وحدد New Project من الصفحة Start.

2- حدد Visual Basic Projects واختر القالب Windows Control Library.

3- قم بتسمية المشروع IntelliCombo وحدد موقع المناسب للمشروع.

4- انقر فوق OK لإنشاء المشروع. عند هذا الحد، فقد تمكنا من إنشاء قالب عنصر تحكم فارغ والذي يشبه الموجود في Visual Basic 6.0.

5- انقر بزر الماوس الأيمن فوق المصمم UserControl1 وحدد Properties.

6- في الإطار Properties، قم بتغيير الخاصية Properties من UserControl1 إلى IntelliCombo.

7- أغلق الإطار Design واحفظ التغييرات التي تمت على UserControl1.vb عند مطالبتك بذلك.

8- في Solution Explorer، انقر بزر الماوس الأيمن فوق UserControl1.vb وإعادة تسمية هذا الملف بالاسم IntelliCombo وهذا من أجل التوافق فقط.

9- افتح عنصر التحكم IntelliCombo مرة أخرى في الإطار Design.

قد يحاول الذين تعودوا على إنشاء عناصر التحكم في VB6 سحب عنصر الحكم ComboBox إلى عنصر التحكم الحالي والبدء في تعيين خصائص عنصر التحكم كخصائص ComboBox.

من أهم التغييرات في Visual Basic .NET هو إمكانية الوصول الكامل للتعليمة البرمجية التي يقوم بإنشائها لنا. انقر بزر الماوس الأيمن فوق IntelliCombo.vb وحدد الخيار View Code، لعرض التعليمة البرمجية التي أنشأها Visual Studio .NET IDE.

يتم إخفاء معظم التعليمة البرمجية في منطقة تسمى "Windows Form Designer generated code". قم بتوسيع هذه المنطقة بالنقر فوق العلامة + إلى اليسار، ليصبح لديك حق الوصول الكامل إلى أي تعليمة برمجية أنشأها IDE. لاحظ أنه تم وراثة الفئة IntelliCompo من System.Windows.Forms.UserControl. يعني ذلك الأمر أن المشروع مناسب لعمل UserControl. عند هذا الحد يمكننا إضافة عناصر التحكم وتخصيصها حسب احتياجاتنا.

نطمع الآن في محاكاة سلوك عنصر التحكم القياسي ComboBox ثم محاولة الوصول إلى إمكانية استكمال التعليمة البرمجية في كل مرة يتم ضغط مفتاح من المفاتيح. وهذا ما سوف نحتاج مفهوم التوارث فيه. في VB6، كانت عناصر التحكم المخصصة، تعتمد بالكامل على القالب UserControl. وكان يمكن سحب العناصر إلى ذلك القالب وإضافة التعليمة البرمجية إلى خصائص عنصر التحكم وإلى الأساليب لتمرير الاتصالات خلال عناصر التحكم الأساسية الموجوده بها. وبالرغم من أن المعالج ActiveX Control Interface Wizard يمكن أن يساعد في زيادة سرعة هذه العملية، إلا أنه ما زال مضيعًا للوقت ومملا. وإليك طريقة سهلة.

1-انقر بزر الماوس الأيمن فوق IntelliCombo.vb في Solution Explorer وحدد View Code.

2- غير السطر "Inherits" لقراءة ما يلي:

Inherits System.Windows.Forms.ComboBox

يؤدي ذلك إلى عدم قيام Visual Basic .NET بوراثة سلوك الفئة UserControl بأكمله ولكننا نريد أن نصبح أكثر دقة ونرث سلوك ComboBox بأكمله.

ملاحظة: عند إعادة فتح الإطار Design View بعد تغيير السطر "Inherits"، فستلاحظ أن مصمم عنصر التحكم قد تغير. فلم يعد من الممكن عرض تمثيل مرئي للكائن

IntelliCombo الذي كان من الممكن سحب عناصر التحكم إلى داخله وترتيبها. ولكن لأن عنصر التحكم ComboBox له واجهة مستخدم التي نستطيع توارثها، فلا نحتاج إلى طريقة عرض تصميم واجهة المستخدم.

أصبح لدينا الآن عنصر تحكم جديد باسم IntelliCombo الذي يسلك سلوك ComboBox. لماذا؟ لأننا ورثنا جميع ميزات ComboBox ولم نكتب فوق مزايا موجودة أو أضفنا مزايا جديدة. سنحاول الآن إضافة التليمة البرمجية لاستكمال العبارات البرمجية بشكل تلقائي ثم محاولة بناء المكون الجديد.

1- في Code View، قم بإنشاء الإجراء KeyUp لعنصر التحكم بتحديد (base Class Events) في القائمة اليسرى ثم حدد الحدث KeyUp في القائمة اليمنى.

2- قم بلصق التعليمة البرمجية التالية في الفئة لهذا الحدث:

Dim index As Integer
Dim actual As String
Dim found As String
' Do nothing for certain keys such as navigation keys
If ((e.KeyCode = Keys.Back) Or _
(e.KeyCode = Keys.Left) Or _
(e.KeyCode = Keys.Right) Or _
(e.KeyCode = Keys.Up) Or _
(e.KeyCode = Keys.Delete) Or _
(e.KeyCode = Keys.Down) Or _
(e.KeyCode = Keys.PageUp) Or _
(e.KeyCode = Keys.PageDown) Or _
(e.KeyCode = Keys.Home) Or _
(e.KeyCode = Keys.ShiftKey) Or _
(e.KeyCode = Keys.End)) Then
Return
End If
' Store the actual text that has been typed
actual = Text
' Find the first match for the typed value
index = FindString(actual)
' Get the text of the first match
If (index > -1) Then
found = Items(index).ToString()
' Select this item from the list
SelectedIndex = index
' Select the portion of the text that was automatically
' added so further typing will replace it
SelectionStart = actual.Length
SelectionLength = found.Length
End If

1- من القائمة Build حدد Build IntelliCombo.

ما قمنا به الآن هو أننا أنشأنا عنصر تحكم مطابق لـ ComboBox، ولكن باستخدام KeyUp الذي يعتمد استكمال العبارة البرمجية التلقائية. بعد الفراغ من ذلك، أصبحنا قادرين على الاستفادة من الوظائف الأساسية لعنصر التحكم الموجود ComboBox، بما في ذلك الأسلوب الذي يقوم بإرجاع عنصر القائمة الأول الذي يتطابق مع النص المحدد. لأن هذه الميزة توجد في عنصر التحكم الأساسي ComboBox، ولذلك فسنحاول ترقيته دون الحاجة إلى إعادة كتابة التعليمة البرمجية من البداية.

من أجل اختبار عنصر التحكم الجديد، سنقوم ببناء المشروع البسيط Windows Application باستخدام نموذج بسيط يجتوي على عنصر التحكم القياسي CombBox وعنصر التحكم IntelliCombo. سنقوم بنشر كلاً من عنصر التحكم باستخدام قائمة مطابقة وتحقق من التشابه والاختلاف في سلوك كل منهم. قم بالخطوات التالية:

1-في Solution Explorer، انقر بزر الماوس الأيمن فوق الحل IntelliCombo. انقر فوق ِِAdd ثم فوق New Project.

2-في المربع Add New Project، حدد Visual Basic Projects واختر القالب Windows Application.

3-قم بتسمية المشروع بالاسم "IntelliComboDemo" وانقر فوق OK.

4- انقر بزر الماوس الأيمن فوق الجزء References للمشروع IntelliComboDemo في Solution Explorer وحدد Add Reference.

5- في المربع Add Reference، انتقل إلى علامة التبويب Projects، ثم حدد المشروع IntelliCombp ثم انقر فوق Select ثم النقر فوق OK لإضافة مرجع.

6- في Form Designer، اسحب عنصر التحكم القياسي CombBox إلى داخل Form1.

7- اسحب عنصر التحكم الجديد IntelliCombo من أسفل علامة التبويب Windows Form Controls لـ Toolbox ثم ضعه مباشرةً أسفل عنصر التحكم القياسي ComboBox.

ملاحظة:

يظهر عنصر التحكم IintelliCombo بشكل تلقائي في ToolBox لأن المشروع IntelliCombo في الحل الحالي. ولكن كيف يمكن إضافة عنصر التحكم بشكل دائم إلى ToolBox لجميع المشروعات.

8-انقر نقرًا مزدوجًا فوق Form1 وأضف التعليمة البرمجية التالية إلى الحدث Form_Load:

' Fill in the standard ComboBox
ComboBox1.Items.Add("Alabama")
ComboBox1.Items.Add("Alaska")
ComboBox1.Items.Add("Arizona")
ComboBox1.Items.Add("Arkansas")
ComboBox1.Items.Add("California")
ComboBox1.Items.Add("Colorado")
ComboBox1.Items.Add("Connecticut")
' Fill in the new IntelliCombo
IntelliCombo1.Items.Add("Alabama")
IntelliCombo1.Items.Add("Alaska")
IntelliCombo1.Items.Add("Arizona")
IntelliCombo1.Items.Add("Arkansas")
IntelliCombo1.Items.Add("California")
IntelliCombo1.Items.Add("Colorado")
IntelliCombo1.Items.Add("Connecticut")

1- اننقر بزر الماوس الأيمن فوق المشروع IntelliComboDemo في Solution Explorer وحدد المشروع Set as Startup.

2- انقر فوق الزر Button أو اضغط على F5 لاختبار التطبيق.

3- انقر فوق عنصر التحكم القياسي ComboBox وابدأ "alas" بحيث يكون كل حرف في مرة واحدة وانظر إلى عنصر التحكم.

4- انقر فوق عنصر التحكم الجديد IntelliCombo وكرر الخطوة السابقة وتأمل كيف يعالج عنصر التحكم المخصص الجديد نفس الإدخال.

يمكن القول الآن أنه أصبح لدينا عنصر تحكم يسمح للمستخدمين بكتابة أحرف قليلة عند إدخال أسماء في النموذج بينما يظل يقوم بالتحقق من صحة الإدخالات على قائمة دون الحاجة إلى استخدام الماوس بأي شكل من الأشكال. ولأننا ورثنا كل مميزات ComboBox الأساسية، فيمكنك استخدام الماوس لعرض القائمة المنسدلة بأكملها.

إضافة عناصر تحكم مخصصة إلى ToolBox

كيف يمكنك بعد عرفت طريقة إنشاء عناصر التحكم أن تستفيد منها وتضيفها إلى ToolBox:

1- في Visual Studio .NET انقر بزر الماوس الأيمن فوق ToolBox وانقر فوق Add Tab.

2- قم بتسمية علامة التبويب الجديدة بـ "My Custom controls".

3- انقر فوق علامة التبويب الجديدة لعرض المحتويات. سيكون هناك عنصر واحد موجود وهو Pointer.

4- انقر بزر الماوس الأيمن فوق علامة التبويب الجديدة وحدد Customize ToolBox.

5- في المربع Customize ToolBox، حدد علامة التبويب .NET Framework Components.

6- انقر فوق الزر Browse، وابحث عن الملف IntelliCombo.dll في الدليل bin تحت مجلد المشروع IntelliCombo ثم انقر فوق Open.

7- تأكد من أن عنصر التحكم IntelliCombo قد تم عرضه في القائمة وتم وضع علامة اختيار بجواره.

8- انقر فوق OK.

لقد أضفنا الآن عنصر التحكم إلى علامة تبويب في ToolBox، فمن الأفضل أن نفصل عناصر التحكم التي أنشأنها عن عنصر التحكم القياسية من سهولة التمييز بينها واستخدامها

مجلة مطوري الشرق الأوسط

#2

شكرا لك أخي cold0zero علي هذه المشاركة المميزة .

ولكن من المفترض وجودها في منتدي فيجوال بيسك دوت نيت .

تحياتي لك

الإنسان الذي يقول بأنه لا يمكن عمل شيء يجب ألا يعيق مطلقاً الإنسان الذي يقوم بعمل ذلك الشيء.

إن تخطئ فأنت إنسان ... أما أن تلوم جهازك الكمبيوتر على خطأك فهذا أكثر إنسانية.

هذا الموضوع مغلق.

مواضيع مشابهة