![]() |
|
مـقـال - ما هو أصل الكلمتان e.DrawFocusRectangle و e.DrawBackground - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : مـقـال - ما هو أصل الكلمتان e.DrawFocusRectangle و e.DrawBackground (/showthread.php?tid=5199) |
مـقـال - ما هو أصل الكلمتان e.DrawFocusRectangle و e.DrawBackground - RaggiTech - 05-10-12 كاتب الموضوع : silverlight
الموضوع: ما هو أصل الكلمتان e.DrawFocusRectangle و e.DrawBackgroundاللغة المستخدمة: الفيجوال بيسك التطبيق: فيجوال استوديو 2008 [VS 9.0] الدوت نت: .Net Framework 3.5 المستوي: ليس للمبتدئين المقـدمـة: من يهتمون غالبا بتطوير الكونترول وإعادة رسمه مرة ثانية ولكن بشكل مختلف ولو قليلا عن الموجود في الدوت نت العادي يفهمون جيدا ماهية مسميات مثل e.DrawBackground
e.DrawFocusRectangle لأنهم و في الغالب ما يستخدمونها في أحداث Events مثل الحدث DrawItem Event و الهدف هنا من هذا المقال هو توضيح أصل كل من الكلمتان DrawFocusRectangle و DrawBackground أو توضيح ماهية هاتان الكلمتان وبالتالي نستطيع التعديل علي أحدهما أو علي كليهما لتتناسبا مع ما نريده بشكل عام نبذة عن أصل كلمة DrawFocusRectangle و DrawBackground هناك بعض الكونترول Controls أو الكلاس Class الموجودة في الدوت نت تدعم خاصية Owner Draw وعلي سيبل المثال لا الحصر هذه الكونترول هي ListBox Control
ComboBox Control TabControl Control غالبا جميع الكونترول التي تدعم خاصية Owner Draw لن تجد بها الحدث Paint Event لأن مايكروسوفت قامت بإخفاء هذا الحدث وستجد بدلا من الحدث Paint Event أحداثا Events أخري مثل الحدث DrawItem Event أو الحدث DrawSubItem Event و لكي نتفهم جيدا أصل معني الكلمتان DrawFocusRectangle و DrawBackground يجب علينا أن ندرس مكونات الكلاس الذي يحتوي علي هاتان الكلمتان وهذا الكلاس هو DrawItemEventArgs Class وبدون الدخول في تفاصيل كثيرة عن كيفية إعادة بناء DrawItemEventArgs أو بناء EventArgsHandler أو Delegates لأن هذا ليس موضوع النقاش لكن و بشكل عام يجب علينا علي الأقل أن نتعرف علي العناصر الموجودة في الكلاس DrawItemEventArgs Class الكود التالي يوضح جزء من الكلاس DrawItemEventArgs ومكوناته بلغة الفيجوال بيسك وفي المرفقات ستجدون نسخة كاملة من الكلاس بالإضافة إلي الكلاس DrawItemEventHandler كود : Public Class DrawItemEventArgsماذا فعلت مايكروسوفت لتنفيذ الأمران DrawFocusRectangle و DrawBackground ماذا فعلت مايكروسوفت ؟ هذا السؤال سألته لنفسي كثيرا مرارا وتكرارا وتحديدا عندما كنت طالبا بالجامعة منذ بضعة أعوام ربما في ذلك الوقت لم يكن لدي الوقت الكافي لأبحث في الأمر وذلك لأن تخصصي أو دراستي لم يكن لها علاقة بالكمبيوتر علي الإطلاق ولكنني بعد أن تخرجت واستلمت عملي وجدت أن لدي وقتا كافيا لأبحث في كثير من الأشياء التي لم أجد لها إجابة شافية وأنا طالب بالجامعة وكان الجواب ببساطة هو GDI ومن هنا بدأت أهتم وأركز علي دراسة GDI بالتفصيل الممل حتى استطعت أن أصل الي الكثير من الإجابات عن بعض من الأسئلة التي كانت تدور في ذهني بخصوص موضوع المقال وغيرها من الأمور المماثلة في واقع الأمر لو سألتموني أبن تضع مايكروسوفت الكود الخاص برسم DrawFocusRectangle أو الكود الخاص برسم DrawBackground فلن أستطيع أن أجيب علي هذا السؤال تحديدا فهي ربما وضعتهما في أحد الأماكن التالية وهنا أنا أجزم فقط لا غير: -
علي العموم أين تضع مايكروسوفت الكود الخاص برسم DrawFocusRectangle أو غيره فهذا لا يسبب لي أي نوع من القلق علي الإطلاق فنحن نستطيع أن نضع الكود الخاص برسم DrawFocusRectangle أو غيره في أي مكان مناسب بشرط أن نستخدمه في المكان الصحيح أثناء رسم الكونترول. وبما أنني أخمن أن مايكروسوفت وضعت الكود الخاص برسم DrawFocusRectangle وأيضا DrawBackground في كلاس أخر لذلك قمت ببناء كلاس ووضعت فيه جميع الأوامر الخاصة برسم مثل هذه الأشياء الإجراءان DrawFocusRectangle Method و DrawBackground الكود التالي يوضح الكود الخاص بكلاس أخر أطلقت عليه Graphics Utility Class حيث فيه وضعت الأوامر الخاصة برسم DrawFocusRectangle وأيضا الأوامر الخاصة برسم DrawBackground والكود التالي يوضح شكل الكلاس وفي المرفقات ستجدون نسخة كاملة من الكلاس وأعتقد أن الكود واضح ولا يحتاج الي أي تفاصيل أو شرح إضافي وخاصة لمن يتعامل مع GDI كود : Public NotInheritable Class GraphicsUtilityتمرير الإجراءان DrawFocusRectangle Method و DrawBackground الأن لنمرر الأوامر الخاصة برسم كل من DrawFocusRectangle و DrawBackground الموجودة في الكلاس GraphicsUtility الي الكلاس DrawItemEventArgs Class فنحصل علي الشكل التالي من الكود كود : Public Class DrawItemEventArgsو بعد الانتهاء من الكود أعلاه نكون قد انتهينا من توضيح فكرة المقال و أتمني أن يكون الموضوع قد أصبح واضحا للمهتمين بمثل هذه الأمور وبالطبع أنتم لستم في حاجة لبناء الكلاس DrawItemEventArgs Class بل يمكنكم استخدام الفكرة الموجودة في الكلاس GraphicsUtility والخاصة برسم كل من DrawFocusRectangle و DrawBackground من خلال الكلاس الذي تبنونه باستخدام الوراثة مع أي من الكلاسات التي تدعم خاصية Owner Draw بالمرفقات ستجدون نسخة كاملة من جميع الأكواد التي طرحناها أعلاه والملف المرفق بنسخة الفيجوال استوديو 2008 مع تحياتي أخوكم عمر |