Form คืออะไรใน Windows Forms App
ในโปรแกรม Windows Forms Application (WinForms) ของภาษา C# คำว่า Form หมายถึง “หน้าต่างของโปรแกรม” ที่ผู้ใช้เห็นและโต้ตอบด้วยโดยตรง
Form ทำหน้าที่เป็น User Interface (UI) หลักในการแสดงผลและควบคุมการทำงานของโปรแกรม ภายในฟอร์มสามารถวาง Control ต่าง ๆ ได้ เช่น
- ปุ่ม (Button)
- กล่องข้อความ (TextBox)
- ป้ายชื่อ (Label)
- ตารางข้อมูล (DataGridView)
- หรือแม้แต่ฟอร์มย่อยอื่น ๆ
พูดง่าย ๆ ก็คือ Form คือหน้าต่างหลักที่ผู้ใช้มองเห็นและใช้งานโปรแกรมได้จริงบน Windows
ประเภทของ Form ที่ใช้ใน WinForms
โดยทั่วไป Form แบ่งออกเป็น 2 ประเภทหลัก คือ
- SDI Form (Single Document Interface)
- MDI Form (Multiple Document Interface)
ซึ่งแต่ละแบบมีลักษณะการใช้งานและเป้าหมายต่างกัน
SDI Form (Single Document Interface)
SDI Form (Single Document Interface) คือรูปแบบของ Form ในโปรแกรม Windows ที่แต่ละหน้าต่างของโปรแกรมทำงานแบบอิสระจากกัน ไม่อยู่ภายในหน้าต่างหลักเดียวกัน
โปรแกรมจะเปิด ฟอร์มละหนึ่งเอกสาร หรือหนึ่งหน้าจอในแต่ละครั้ง
โดยที่แต่ละฟอร์มสามารถทำงานของตัวเองได้อย่างอิสระ ไม่เกี่ยวข้องกับฟอร์มอื่น
ลักษณะของ SDI Form มีดังนี้
- แต่ละหน้าต่างของโปรแกรมจะเปิดแบบอิสระ (ไม่อยู่ในหน้าต่างหลักเดียวกัน)
- เหมาะกับโปรแกรมที่ทำงานกับข้อมูลเพียงชุดเดียวในแต่ละครั้ง
- ตัวอย่างโปรแกรมที่ใช้ SDI เช่น
- Notepad
- Microsoft Paint
เป้าหมายของการใช้งาน SDI Form
- ใช้ในโปรแกรมขนาดเล็ก
- ต้องการความเรียบง่าย
- ไม่มีการเปิดหลายหน้าจอภายในโปรแกรมเดียว
MDI Form (Multiple Document Interface)
MDI ย่อมาจาก Multiple Document Interface หมายถึง “ฟอร์มหลัก (Main Form)” ที่สามารถเปิด ฟอร์มลูก (Child Forms) หลายฟอร์มได้ภายในหน้าต่างเดียวกัน
พูดให้เข้าใจง่ายคือ ฟอร์มแบบ MDI คือ หน้าต่างหลักของโปรแกรม ที่สามารถบรรจุฟอร์มย่อยหลายหน้าต่างไว้ภายใน เหมือนโปรแกรม Microsoft Word หรือ Visual Studio ที่เปิดเอกสารหลายไฟล์พร้อมกันได้
ลักษณะของ MDI Form
- มี ฟอร์มหลัก (Parent Form) 1 ตัว ทำหน้าที่เป็นตัวบรรจุฟอร์มอื่นๆ
- มี ฟอร์มลูก (Child Forms) หลายตัว เปิดอยู่ภายในฟอร์มหลัก
- ฟอร์มลูกทั้งหมดอยู่ในขอบเขตของฟอร์มหลัก ไม่สามารถออกไปนอกหน้าต่างได้
- สามารถจัดเรียงฟอร์มลูกได้ เช่น
- เรียงแบบ Tile (เรียงต่อกันแบบกระเบื้อง)
- เรียงแบบ Cascade (ซ้อนกัน)
จุดประสงค์และเป้าหมายของการใช้งาน MDI Form
การใช้ MDI Form มีเป้าหมายเพื่อให้ผู้ใช้สามารถ
- ทำงานกับข้อมูลหรือเอกสารหลายชิ้นในระบบเดียวกัน
- สลับหน้าจอได้สะดวก โดยไม่ต้องเปิดหลายโปรแกรม
- รักษาความเป็นระเบียบของหน้าต่าง
เหมาะสำหรับโปรแกรมขนาดกลางถึงขนาดใหญ่ เช่น
- ระบบบัญชี
- ระบบบริหารโรงเรียน
- โปรแกรมจัดการเอกสาร
- โปรแกรมจัดการคลังสินค้า
ตัวอย่างการใช้งาน MDI Form
เมื่อสร้างโปรเจ็กต์แบบ Windows Forms App ขึ้นมา จะมีฟอร์มถูกสร้างมาด้วย 1 ฟอร์ม ชื่อว่า Form1 ในตัวอย่างนี้ผมจะเปลี่ยนชื่อฟอร์มนี้เป็น frmMain และกำหนดให้เป็นฟอร์มแบบ MDI
การตั้งชื่อฟอร์ม สามารถทำได้ดังนี้
- โฟกัสที่ฟอร์มที่ต้องการตั้งชื่อ
- ที่หน้าต่าง Properties ให้กำหนดชื่อฟอร์มที่คุณสมบัติ (Name) ในตัวอย่างกำหนดเป็น frmMain
- ชื่อนี้จะเป็นชื่อแทนเมื่อต้องการอ้างอิงถึงฟอร์ม

การกำหนดให้ฟอร์มทำหน้าที่เป็น MDI Form สามารถทำได้โดยการกำหนดคุณสมบัติ IsMdiContainer ของฟอร์มให้เป็น True

วิธีเพิ่มฟอร์มเข้ามาในโปรเจ็กต์
หลังจากกำหนดฟอร์มแรกให้เป็น MDI แล้ว ต่อไปเราจะเพิ่มฟอร์มเข้ามาอีก 1 ฟอร์ม
- คลิกขวาที่ชื่อโปรเจ็กต์
- ไปที่เมนู Add
- คลิกคำสั่ง Form (Findows Forms)…
- ตั้งชื่อฟอร์มตามต้องการ (ควรสื่อความหมาย) ในตัวอย่างตั้งเป็น frmChild
- คลิกปุ่ม Add เพื่อเพิ่มฟอร์มเข้ามาในโปรเจ็กต์


เขียนโค้ดเพื่อเปิดฟอร์มลูก
หลังจากที่สร้าง MDI Form และเพิ่มฟอร์มลูกเข้ามาในโปรเจ็กต์แล้ว 1 ฟอร์ม ขั้นตอนต่อไปเราจะมาลองเขียนโค้ดเพื่อสั่งให้เปิดฟอร์มลูกขึ้นมาแสดงผลใน MDI Form กันดูครับ
ในตัวอย่างนี้จะทำแบบง่าย ๆ คือเมื่อรันโปรเจ็กต์ขึ้นมาก็สั่งให้เปิดฟอร์มลูกขึ้นมาเลย
ให้ดับเบิ้ลคลิกที่ฟอร์มแม่ (frmMain) เพื่อสร้างเหตุการณ์ Load ขึ้นมา
ในเมธอด frmMain_Load ให้เขียนคำสั่งดังนี้
// เมธอดนี้จะทำงานเมื่อฟอร์ม frmMain ถูกโหลดขึ้นมา (เกิดเหตุการณ์ Load)
private void frmMain_Load(object sender, EventArgs e)
{
frmChild childForm = new frmChild();
// กำหนดให้ฟอร์มที่สร้างขึ้นใหม่เป็นฟอร์มลูก (Child Form)
// โดยมีฟอร์มปัจจุบัน (this) เป็นฟอร์มแม่ (MDI Parent)
childForm.MdiParent = this;
// แสดงฟอร์มลูกบนหน้าจอ
childForm.Show();
}หลังจากนั้นลองรันโปรเจ็กต์ เมื่อฟอร์มแม่ถูกโหลดขึ้นมา ฟอร์มลูกก็จะถูกเปิดขึ้นมาตามคำสั่งในโค้ดที่เราเขียนไว้

