 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:332
|
|
15-03-2018, 05:22 PM
المشاركة 7
|
|
الدرس الثالث :جعل عناصر التحكم ترتب (تنظم) نفسها Making Controls Arrange Themselves
الدرس الثالث :
جعل عناصر التحكم ترتب (تنظم) نفسها Making Controls Arrange Themselves
فى الدرس الثانى تم شرح كيفية إضافة عناصر التحكم إلى النموذج (الفورم) وترتيبها بشكل أنيق . باستخدام هذه التقنيات ، يمكنك إنشاء نماذج مثل تلك المبينة في الشكل 3-1 . (على الرغم من أننا لم نقم بتغطية الكود خلف برنامج النموذج بعد.)

FIGURE 3-1
النموذج يبدو جيدا في الشكل 3-1 ، ولكن ماذا لو قام المستخدم بتوسيع النموذج كما هو مبين في الشكل 3-2؟ على الرغم من أن النموذج أكبر، لكن المناطق التي تحتوي على البيانات ليست كذلك .

Figure 3-2
عنوان صفحة الويب URL للكتاب المحدد في الشكل 3-2 طويل جدا بحيث لا يتناسب مع "صندوق المجموعة" GroupBox ، لذلك يتم اقتطاعه على الرغم من أن النموذج يحتوي على مساحة إضافية ضائعة على اليمين. "صندوق القائمة" ListBox ليس كبير بما فيه الكفاية لعرض جميع العناصر على الرغم من أن هناك مساحة ضائعة في الجزء السفلي . سيكون من الرائع إذا قامت عناصر التحكم بإعادة ترتيب نفسها لاستخدام المساحة المتاحة وعرض عنوان الويب كاملا وعرض المزيد من عناصر القائمة.
ويبين الشكل 3-3 مشكلة أخرى بهذا النموذج . إذا قام المستخدم بتقليص النموذج ، يتم قطع "صناديق النص" TextBoxes و"تسمية رابط العنوان" LinkLabel ، ويتم قطع "التسمية" Year وصندوق النص إلى النصف رأسيا ، وصندوق القائمة يكون غير مناسب ، وصورة الغلاف تفقد تماما.

FIGURE 3-3
البرنامج سوف يبدو أجمل إذا انكمشت عناصر التحكم بحيث تتمكن من رؤية حوافها على الأقل . بعض القيم لا تزال لا تناسب ، ولكن على الأقل النموذج سوف لا يبدو لهاوى . يمكنك حتى جعل النموذج يرفض الإنكماش (التقليص) حتى لا يكون قصير جدا لعرض عنصر تحكم السنة .
يشرح هذا الدرس بعض الطرق البسيطة التي يمكنك بها جعل عناصر التحكم تعيد ترتيب نفسها للاستفادة من أي مساحة متاحة ، وكيفية إعطاء النموذج الحد الأدنى والحد الأقصى للأحجام بحيث لا يمكن للمستخدم تغيير حجمه حتى يصبح عديم الجدوى تماما.
تقييد حجم النموذج RESTRICTING FORM SIZE
النماذج (وفي الواقع كل عناصر التحكم) لها الخصائص "الحجم الأدنى" MinimumSize و"الحجم الأقصى" MaximumSize والتي يمكنك استخدامها لتقييد حجم النموذج . ببساطة قم بتعيين هذه الخصائص من حيث العرض والارتفاع (أو قم بتعيين الخصائص الفرعية للعرض Width والارتفاع Height) ويقوم النموذج بالباقي .
على سبيل المثال ، لمنع المستخدم من جعل النموذج المبين في الشكل 3-3 صغير جدا، يمكنك تعيين الخاصية MinimumSize للنموذج بالقيم (663, 233) .
استخدام خصائص "المرساة" USING ANCHOR PROPERTIES
تمنع الخاصية MinimumSize المستخدم من عمل نموذج صغير جدا ولكنها لا تحل المشكلة الموضحة في الشكل 3-2 . عندما يقوم المستخدم بتغيير حجم النموذج ، سيكون من الرائع إذا غيرت عناصر التحكم أحجامها لتتوائم .
تتيح خاصية "المرساة" Anchor لعنصر التحكم بنماذج الويندوز تغيير حجم نفسه عند تغيير حجم حاويته . يمكن أن تأخذ هذه الخاصية واحدة أو أكثر من القيم Top, Bottom, Left, Right ، في أي مجموعة (توليفة) . وتشير هذه القيم إلى أن حافة عنصرالتحكم ينبغي أن تظل على نفس المسافة من الحافة المقابلة من حاويتها.
على سبيل المثال ، في البداية يتم تعيين الخاصية "مرساة" Anchor لعنصر التحكم بالقيمة "أعلى ، يسار" Top, Left بحيث تبقى على نفس المسافة من أعلى الحاوية والحواف اليسرى لها. إذا قمت بتغيير حجم النموذج ، لا يتحرك عنصر التحكم .
للحصول على مثال أكثر إثارة للاهتمام ، لنفترض أنك وضعت صندوق نص على نموذج ، وتم تعيين الخاصية Multiline بالقيمة True ، وتم ترتيبه بحيث تكون حوافه على بعد 12 بكسل من حواف النموذج ، وتعيين خاصية "المرساة" Anchor بالقيمة (أعلى، أسفل، يسار، يمين) Top, Bottom, Left, Right . عند تغيير حجم النموذج ، يقوم صندوق النص بتغيير حجم نفسه بحيث تبقى جميع حوافه على بعد 12 بكسل من الحواف المقابلة للنموذج .
ملاحظة :
إذا كانت قيم خاصية المرساة Anchor لا تشمل أى من يسار / يمين أو أعلى / أسفل ، يتحرك عنصر التحكم للحفاظ على نفسه على نفس المسافة من منتصف النموذج .
على سبيل المثال، إذا كانت الخاصية Anchor لزر هى "أسفل" Bottom ، فإنه يتحرك بحيث يظل على نفس المسافة من الوسط الأفقي للنموذج.
هذه الحقيقة تمكنك من الحفاظ على واحد أو أكثر من عناصر التحكم فى الوسط . على سبيل المثال ، ضع عدة أزرار بالقرب من أسفل النموذج واختر Format ➪ Center in Form ➪ Horizontally لوسطنتها (مركزتها) أفقيا . الآن إذا قمت بتعيين الخاصية Anchor لهم بالقيمة Buttons ، فإن مجموعة الأزرار تظل متمحورة (متمركزة) عند تغيير حجم النموذج .
ملاحظة :
الخاصية Anchor لا يمكنها تغيير حجم عنصر تحكم مثل التسمية Label أو LinkLabel إذا تم تعيين الخاصية AutoSize لعنصر التحكم هذا بالقيمة True . في هذه الحالة ، عنصر التحكم يكون لديه أفكاره الخاصة حول مدى الكبر الذى ينبغي أن يكون.
لتعيين الخاصية Anchor في وقت التصميم ، يمكنك كتابة قيمة مثل Top, Left, Right في نافذة الخصائص أو يمكنك استخدام محرر المرساة بنافذة الخصائص .
لاستخدام المحرر، انقر فوق الخاصية مرساة Anchor في نافذة الخصائص ، ثم انقر فوق سهم القائمة المنسدلة إلى اليمين لجعل المحرر يظهر كما هو مبين في الشكل 3-4 . انقر على المستطيلات النحيفة لتحديد أو إلغاء تحديد المراسي التي تريد استخدامها. (في الشكل 3-4 يتم تحديد المراسي العلوية والسفلية واليمنى.) عند الانتها ء، اضغط على Enter لقبول التغييرات أو Esc لإلغائها.

FIGURE 3-4
باستخدام خاصية Anchor ، يمكنك حل المشكلة الموضحة في الشكل 3-2 . ويعطي الجدول 3-1 قيم خصائص المرساة Anchor التي تستخدمها عناصر التحكم للسماح لها بالاستفادة من المساحة المتاحة للنموذج .
CONTROL ANCHOR PROPERTY
booksListBox Top, Bottom, Left
detailsGroupBox Top, Bottom, Left, Right
titleTextBox Top, Left, Right
authorTextBox Top, Left, Right
isbnTextBox Top, Left, Right
urlLinkLabel Top, Left, Right
coverPictureBox Top, Bottom, Right
TABLE 3-1
الآن عند تغيير حجم النموذج :
• يمتد صندوق القائمة ListBox رأسيا ليتناسب مع ارتفاع النموذج .
• يمتد صندوق المجموعة GroupBox رأسيا وأفقيا لاستخدام أكبر قدر ممكن من عرض النموذج وارتفاعه .
• تمتد صناديق النص TextBoxes وتسمية الرابط LinkLabel أفقيا لتكون عريضة قدر الإمكان في حين لا تزال مناسبة داخل صندوق المجموعة .
• يتحرك صندوق الصورة PictureBox مع الحافة اليمنى لصندوق المجموعة بحيث يترك أكبر قدر ممكن من المساحة إلى يسار صناديق النص وتسمية الرابط . كما أنها تمتد رأسيا قدر الإمكان في حين تكون مناسبة داخل صندوق المجموعة .
ويبين الشكل 3-5 النتيجة. الآن صندوق القائمة كبير بما يكفي لإظهار كل بنوده وأن تسمية الرابط كبيرة بما يكفي لعرض عنوان صفحة الويب بالكامل .

FIGURE 3-5
لاحظ أن صناديق النص وتسمية الرابط لا تمتد أفقيا عند تغيير حجم النموذج (الفورم) ؛ فهى تمتد عندما يتم تغيير حجم صندوق المجموعة GroupBox الذي يحتوي عليها. في هذا المثال ، عندما يمتد النموذج ، يتم توسيع (تمديد) صندوق المجموعة وعندما يمتد صندوق المجموعة ، تمتد صناديق النص و تسمية الرابط ، وبالتالي فإن النتيجة تكون هي نفسها .
استخدام خصائص المرفأ (دوك) USING DOCK PROPERTIES
الخاصية مرساة (مخطاف) Anchor يمكن أن تتعامل مع معظم احتياجات الترتيب الخاص بك ، ولكن بعض مجموعات من قيم الخاصية مرساة تكون شائعة جدا حتى أن لغة C# توفر خاصية أخرى لتمكنك من التعامل مع هذه الحالات بسهولة أكبر ، هذه الخاصية هى خاصية "الدوك" (المرفأ) Dock . خاصية "الدوك" تتيح لك إخبار عنصر التحكم لإرفاق (ربط) attach نفسه إلى واحد من حواف حاوته.
على سبيل المثال ، عادة ما تمتد القوائم menu عبر الجزء العلوي من النموذج . يمكن توفير هذا السلوك عن طريق تعيين (ضبط) الخاصية مرساة Anchor للقائمة بالقيمة Top, Left, Right ، ولكن ضبط خاصية "الدوك" Dock بالقيمة Top يكون أسهل.
خاصية "الدوك" يمكن أن تأخذ واحدة من ستة قيم . القيم Left, Right, Top, Bottom تربط عنصر التحكم إلى الحافة المقابلة من حاويته ،والقيمة Fill تجعل عنصر التحكم يأخذ أي مساحة متبقية بعد أن تكون خاصية "الدوك" لأى من عناصر التحكم الأخرى قد أخذت طريقها (عملها). لا شيء يمنع عنصر التحكم من ضبط الخاصية مرساة أيضا .
ملاحظة :
لا يمكن للخاصية "دوك" تغيير حجم عنصر تحكم مثل التسمية أو تسمية الرابط إذا تم ضبط الخاصية AutoSize لعنصر التحكم بالقيمة True .
تقوم الخاصية دوك بمعالجة طلبات تحديد المواقع بقاعدة "من يأتى أولا يتم خدمته أولا" استنادا إلى ترتيب تراص عناصر التحكم في النموذج . وبعبارة أخرى ، فإنها تضع عنصر التحكم الأول الذى يلفت انتباهها أولا. عنصر التحكم الثانى يضع نفسه في أي مكان متروك زيادة . بعد ذلك عنصر التحكم الثالث يضع نفسة في المساحة المتبقية ، وهلم جرا.
عادة يتم تحديد ترتيب التراص حسب ترتيب إضافة عناصر التحكم إلى النموذج ، ولكن يمكنك تغيير الترتيب بالنقر بزر الماوس الأيمن على عنصر تحكم وتحديد "أحضر إلى الأمام" Bring to Front أو "أرسل إلى الخلف" Send to Back . ومع ذلك ، إذا كنت تعمل مع مجموعة معقدة من خصائص "الدوك" وأن ترتيب التراص أصبح مفقود (فوضى) ، فإنه من السهل في كثير من الأحيان حذف كافة عناصر التحكم والبدء من جديد من الصفر.
ويبين الشكل 3-6 نموذجا يحمل خمسة تسميات docked Labels (مع AutoSize = False ). الأرقام في خصائص النص لعناصر التحكم تعطي الترتيب الذي تم إنشاؤها ، والذي هو أيضا ترتيب التراص.

FIGURE 3-6
توضح القائمة التالية كيفية تقسيم مساحة النموذج بين التسميات :
1- أول تسمية لديها Dock = Top ، لذلك تأخذ العرض الكامل للجزء العلوي من النموذج .
2- التسمية الثانية لديها Dock = Left ، لذلك تأخذ الحافة اليسرى من المنطقة المتبقية (بعد وضع أول تسمية).
3- التسمية الثالثة لديها Dock = Right ، لذلك تأخذ الحافة اليمنى من المنطقة المتبقية.
4- التسمية الرابعة لديها Dock = Bottom ، لذلك تأخذ الحافة السفلية من المنطقة المتبقية.
5- التسمية النهائية لديها Dock = Fill ، لذلك تشغل كل المساحة المتبقية.
القوائم الراسية DOCKED MENUS
في سيناريو (برنامج) نموذجي للرسو docking ، يحتوي نموذج على شريط قائمة MenuStrip مع خاصية الدوك بالقيمة Dock = Top ، وحاوية مثل "اللوحة" Panel مع Dock = Fill بحيث تأخذ بقية النموذج ، وتوضع جميع عناصر التحكم الأخرى داخل اللوحة .
يمكنك أيضا إضافة "شريط أدوات" ToolStrips و"أشرطة الحالة" StatusBars مع خصائص "الدوك" المناسبة لوضع وسائل التحكم تلك في الأماكن الصحيحة. ويبين الشكل 3-7 نموذج يحوى شريط قائمة MenuStrip (Dock = Top) ، و"حاوية شريط أدوات" ToolStripContainer (Dock = Top) والتي تحتوي على اثنين "أشرطة الأدوات" ToolStrips ، و"شريط حالة" StatusStrip (Dock = Bottom) ، ولوحة Panel (Dock = Fill) . لقد تم جعل اللوحة أكثر قتامة قليلا لذلك فمن السهل أن نرى أين هى .

FIGURE 3-7
حاويات التخطيط (التنسيق) LAYOUT CONTAINERS
يوفر الفيجوال ستوديو العديد من "عناصر التحكم" controls التي ترتب عناصر التحكم الأبناء child التي تحتوي عليها بطرق مختلفة .
القسم التالى يلخص حاويات تخطيط نماذج الويندوز .
عناصر التحكم فى نوافذ الوندوز Windows Forms Controls
لا تستخدم تطبيقات نماذج الويندوز سوى عناصر تحكم تخطيط قليلة. غالبا ما يتم وضع معظم عناصر تحكم النموذج مباشرة على النموذج .
تلخص القائمة التالية عناصر تحكم تخطيط نماذج ويندوز الأكثر فائدة.
1- النموذج Form
النموذج نفسه عبارة عن حاوية تخطيط تسمح لك بترتيب عناصر التحكم عن طريق تحديد الخصائص :
Top, Left, Width, Height, Anchor, and Dock
2- لوحة تخطيط التدفق FlowLayoutPanel
ترتب عناصر التحكم من اليسار إلى اليمين، أو من اليمين إلى اليسار، أو من أعلى إلى أسفل، أو من أسفل إلى أعلى ، والالتفاف wrappingإلى صفوف أو أعمدة جديدة إذا لزم الأمر.
3- اللوحة Panel
تتيح لك ترتيب عناصر التحكم بقدر ما يفعل النموذج من خلال تحديد الخصائص
Top, Left, Width,Height, Anchor, Dock
4- لوحة تخطيط الجدول TableLayoutPanel
تتيح لك ترتيب عناصر التحكم في صفوف وأعمدة ، من خلال تحديد الخواص التالية لعنصر تحكم :
RowSpan , ColumnSpan للسماح بتمديد صفوف أو أعمدة متعددة.
عناصر التحكم القليلة تلك تمكنك من ترتيب عناصر التحكم بمرونة جدا.
تدريب :
في هذا التدريب ، يمكنك الحصول على ممارسة استخدام الخصائص Anchor , Dock من خلال بناء التطبيق المبين في الشكل 3-8 .

FIGURE 3-8
عند تغيير حجم النافذة ، تمتد صناديق النص و تسمية الرابط أفقيا ، وصندوق الصورة يمتد رأسيا . لاحظ في الشكل 3-8 أن صورة الغلاف طويلة ورقيقة نوعا ما. عندما يصبح صندوق الصورة أطول ، فإنه يمكنه عرض نسخة أكبر من صورة الغلاف . يعرض عنصر التحكم الصورة بأكبر قدر ممكن دون تشويهها.
لاحظ أن البرنامج الذي تقوم ببنائه لن يفعل أي شيء إلا البقاء ساكنا فى شكله الأنيق مع تغيير حجم عناصر التحكم عند تغيير حجم النموذج . وسوف يتم تغطية التقنيات التي تحتاجها لجعله يستجيب إلى اختيارات القائمة في الدروس اللاحقة.
متطلبات التدريب :
فى هذا التدريب سوف تقوم بما يلى :
1- إنشاء برنامج بثلاثة عناصر تحكم رئيسية شريط قائمة MenuStrip ، و شريط حالة StatusStrip و لوحة Panel ، واستخدام خصائص Dock لجعل هذة العناصر الثلاثة تبقى فى مكانها المناسب .
2- إضافة عناصر تحكم إلى اللوحة Panel .
3- استخدام خاصية Anchor لجعل صندوق القائمة ListBox يمتد رأسيا عند تغيير حجم الفورم .
4- استخدام خاصية Anchor لجعل صناديق النص TextBoxes و تسمية الرابط LinkLabel تمتد أفقيا عند تغيير حجم الفورم .
5- استخدام خواص Anchor لجعل صندوق الصورة PictureBox يغير حجمه رأسيا عند تغيير حجم الفورم .
توجيهات Hints :
• تذكر أن صناديق النص TextBoxes وتسمية الرابط LinkLabel تمتد مع صندوق المجموعة GroupBox الذى يحتويها ، وليس مع النموذج نفسه. إذا لم تقم بتمديد صندوق المجموعة ، فإن عناصر التحكم التي يحتوي عليها لن تمتد .
• لعمل قائمة الملف File ، قم بإضافة شريط قائمة MenuStrip إلى النموذج ، حدده ، انقر فوق الصندوق "اكتب هنا" Type Here الذي يظهر، واكتب &File . (حرف العطف & يجعل الحرف الذى يليها وهو "F" تحته خط) . جعل القائمة تفعل شيئا مفيدا يتم تغطيته فى الدرس الخامس ، لذلك لا تقلق بشأن ذلك الآن .
• لعمل "تسمية شريط الحالة" ، أضف شريط حالة StatusStrip إلى النموذج وحدده . انقر على السهم المنسدل الصغير في StatusStrip وحدد StatusLabel . انقر فوق تسمية الحالة الجديدة StatusLabel واستخدام نافذة الخصائص لتعيين نصه Text ليكون This is a StatusStrip .
• أضف بعض البنود items إلى صندوق القائمة ListBox ، أضف صورة إلى صندوق الصورة PictureBox ، وأضف نص Text إلى عناصر التحكم الأخرى ، ولكن لا تقلق بشأن جعل البرنامج يتخذ أي إجراءات .
التدريب خطو بخطوة :
• الخطوة الأولى : إنشاء الثلاثة عناصرالرئيسية فى البرنامج وهى "شريط القائمة" MenuStrip و"شريط الحالة" StatusStrip و"لوحة" Panel . استخدام خصائص Dock لجعل هذه العناصر فى مكانها المناسب .
1- إبدأ مشروع جديد بالمسمى Better Book List . اضبط الخواص Siz و MinimumSize للفورم بالقيم (726 , 286) .
2- أضف MenuStrip إلى النموذج . (لاحظ أنه بشكل افتراضى ، شريط القائمة يرسو فى الأعلى ، أى Dock = Top ) استخدم التنويه السابق والخاص بشريط القائمة لإنشاء قائمة ملف File فارغة.
3- أضف StatusStrip إلى النموذج . (لاحظ أنه بشكل افتراضي ، شريط الحالة يرسو فى الأسفل ، أى Dock = Bottom ) استخدم التنويه السابق والخاص بشريط الحالة لإنشاء التسمية This is a StatusStrip .
4- أضف لوحة Panel إلى النموذج . اضبط الخاصية Dock لتكون Fill .اضبط الخاصية BackColor لتكون أخضر فاتح light green .
• الخطوة الثانية : إضافة عناصر تحكم إلى اللوحة Panel .
1- أضف عناصر تحكم إلى النموذج في المواضع المبينة في الشكل 3-8 بشكل تقريبى .
2- قم بضبط الخاصية AutoSize لتسمية الرابط LinkLabel لتكون False واجعلها بنفس حجم صناديق النص TextBoxes .
3- أدخل بعض قيم النص Text في صناديق النص وتسمية الرابط بحيث يكون لديك شيء ينظر إليه . أدخل ما يكفي من البنود items في صندوق القائمة ListBox بحيث لا تتلاءم جميعها عندما يكون النموذج بالحجم الابتدائى .
4- قم بضبط الخاصية SizeMode لصندوق الصورة PictureBox لتكون Zoom . ضع صورة طويلة ، ورفيعة نسبيا ، في خاصية الصورة Image الخاصة به .
• الخطوة الثالثة : استخدام الخاصية Anchor لجعل صندوق القائمة ListBox يمتد رأسيا عندما يتم تغيير حجم الفورم .
1- اضبط الخاصية Anchor لصندوق القائمة لتكون بالقيم Top, Bottom, Left .
• الخطوة الرابعة : استخدام الخاصية Anchor لجعل صناديق النص وتسمية الرابط تمتد أفقيا عند تغيير حجم الفورم .
1- اضبط الخاصية Anchor لصندوق المجموعة GroupBox لتكون بالقيمة Top, Bottom, Left, Right .
2- اضبط الخاصية Anchor لكل من صناديق النص وتسمية الرابط لتكون Top, Left, Right .
• الخطوة الخامسة : استخدام الخاصية Anchor لجعل صندوق الصورة PictureBox يتغير فى الحجم رأسيا عندما يتغير حجم الفورم .
1- اضبط الخاصية Anchor لصندوق الصورة لتكون Top, Bottom, Left .
قم بتشغيل البرنامج وشاهد ما يحدث عند تغيير حجم الفورم .
|