هل أردت يوما ان تقوم ببناء تطبيق تكون فيه النوافذ داخل نافذة رئيسية في البرنامج، هذا ما سنتعرف عليه في هذه المقالة، فدعنا نبدأ سوية من اتمام هذا الأمر.دعنا في البداية نقوم بانشاء برنامج من نوع Windows Application، سيظهر لك واجهة وحيدة هي Form1، دعنا نغير اسمها إلى MainForm، وبعدها قم بإنشاء فورم جديدة دعنا نسميها Child1، والان ما سنفعله أننا سوف نجعل الفورم الابن الجديدة المضافة عند فتحها سوف تظهر داخل الواجهة الرئيسية.
والان ما علينا فعله دعنا نقوم بإضافة شريط القوائم MenuStrip من شريط الأدوات، وقم بتعديلها لتصبح على النحو التالي:

والان:
1. في الواجهة Main Form إذهب إلى الخصائص وابحث عن الخاصية IsMdiContainer وحول قيمتها من False إلى True.
2. إذهب إلى القائمة Childrens التي اضفناها سابقا وانقر نقرا مزدوجا على الخيار Child1، ليتم تفعيل الحدث Click لها.
3. قم بكتابة الكود التالي:
private void child1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Child1 child = new Child1();
child.MdiParent = this;
child.Show();
}
والان شغل البرنامج واطلب أمر فتح النافذة الابن الأولى، لتظهر لك الواجهة التالية:

طبعا في الكود السابق كل ما قمت بعمله هو التصريح عن كائن اسنه child من الصف Child1 من خلال التعليمة:
Child1 child = new Child1();
ثم قمنا بإعلام هذا الابن إلى الاب الذي يتبع له من خلال السطر التالي:
child.MdiParent = this;
طبعا this تمثل الكائن من الصف الذي تنتمي له وهو هنا MainForm، بقي أمر أخير هو أظهار هذه النافذة من خلال التعليمة:
child.Show();

والان دعنا نضيف إلى القائمة Children الخيار التالي، Get Name Of Active Child اي اظهار اسم الواجهة المفعلة حاليا في MessageBox، الغاية من هذه العملية معرفة كيفية تحديد الواجهة المفعلة الان لاحظ الشكل التالي:

والان قم بكتابة الكود التالي في الحدث الخاص بالخيار السابق:
private void getNameOfChildToolStripMenuItem_Click(object sender, EventArgs e)
{
Form frm = this.ActiveMdiChild;
MessageBox.Show(frm.Text);
}
والان دعنا نقوم بإضافة أمر آخر وهوترتيب هذه الواجهات عندما تكون مفتوحة، حتى نستطيع عمل ذلك دعنا نضيف قائمة تدعى Arrange وإضافة الاوامر التالي إليها لاحظ الشكل التالي:

والان دعنا نبدأ بالخيار Horizontal، انقر عليها نقرا مزدوجا واكتب الكود التالي:
private void horizontalToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileHorizontal);
}
وكذلك الأمر بالنسة للـ Vertical:
private void verticalToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.TileVertical);
}
وأخيرا Cascade:
private void cascadeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.Cascade);
}
وقم بتجربة البرنامج ولاحظ الأشكال التالية:


بقي شيء أخير هو اضافة قائمة تدعى Window منخلالها سيتم إظهار النوافذ المفتوحة وأي نافذة مفعلة حاليا، لاحظ الشكل التالي:


لتحميل مثال الدرس إليك الرابط التالي:http://www.eclasshome.com/attach/upload3/wh_54743652.zip