MDI Forms
MDI ย่อมาจาก Multiple Document Interface และเป็นการอินเตอร์เฟซกับผู้ใช้ที่มีการใช้ในโปรแกรมประยุกต์ ในชุด Microsoft Office โปรแกรมประยุกต์จำนวนมากได้ใช้การอินเตอร์เฟซแบบ MDI ถ้าโปรแกรมประยุกต์ที่พัฒนาขึ้นมามีความเกี่ยวข้องกับเอกสารจำนวนมากในเวลาเดียวกัน การอินเตอร์เฟซ MDI จะเป็นการเลือกที่ดี
โปรแกรมประยุกต์ MDI
การสร้างโปรแกรมประยุกต์ MDI ทำได้ง่าย ในการเริ่มต้นให้เพิ่มโมดูล MDI Form เข้าไปยัง project ปัจจุบัน ซึ่งโมดูล MDI Form คล้ายกับโมดูลฟอร์มธรรมดา แต่มีข้อแตกต่างเล็กน้อย คือ
- โมดูล MDI Form มีเพียง 1 โมดูล ต่อ project
- ไม่สามารถวางตัว control ส่วนโดยตรงที่ MDI Form โดยให้สร้างเมนู ตัว control ที่มองไม่เห็น (เช่น timer และ Common Dialog) และตัว control ที่สนับสนุนคุณสมบัติ Align (เช่น Picture box, Tool bar และ Status bar) การแสดงตัว control อื่น ๆ บน MDI Form ให้วางในตัว control ประเภท container ตามปกติ คือ Picture box
- ไม่สามารถแสดงข้อความหรือกราฟฟิกบนผิว MDI Form
MDI child forms
อ๊อบเจค MDI Form จะเก็บฟอร์มลูก 1 ฟอร์ม หรือมากกว่า การสร้างฟอร์มลูกทำได้โดยการสร้างฟอร์มธรรมดาเข้าไปใน project และตั้งค่าคุณสมบัติ MDIChild เป็น True ไอคอนของฟอร์มใน Window ของ Project Explorer จะเปลี่ยน
ฟอร์มลูก MDI จะไม่แสดงภายนอกฟอร์มแม่ MDI Form ถ้าฟอร์มลูก MDI เป็นฟอร์มเริ่มต้นสำหรับโปรแกรมประยุกต์ ฟอร์มแม่ MDI Form จะได้รับการโหลดโดยอัตโนมัติ และแสดงก่อนที่ฟอร์มลูกจะมองเห็น instance ของ ฟอร์มลูก MDI สร้างด้วยการใช้คีย์เวิร์ด New
' ภายใน โมดูล MDI Form
Private Sub mnuFileNew_Click ( )
Dim frmDoc As New frmDocument
frmDoc.Show
End Sub
โมดูล MDI Form สนับสนุนคุณสมบัติ AutoShowChildren ถ้าคุณสมบัตินี้เป็น True ฟอร์มลูกจะปรากฏขึ้นภายในฟอร์มแม่ตลอดเวลาที่มีการโหลดฟอร์มแม่ และไม่สามารถซ่อนได้ ถ้าไม่กำหนดคุณสมบัติเป็น False
ฟอร์มลูก MDI มีลักษณะพิเศษบางประการ เช่น ไม่แสดงแถบเมนู ถ้ามีการเพิ่มเมนูระดับสูงไปที่ฟอร์มฟอร์มลูก เมื่อฟอร์มแอ๊คทีฟ แถบเมนูจะไปแทนที่แถบเมนูของฟอร์มแม่ MDI Form การปรับปรุงเมนูทำได้เฉพาะโมดูล หลักของ MDI Form
เมื่อคำสั่งเมนูเกี่ยวข้องในโมดูล MDI Form ให้ประยุกต์เข้าไปที่ฟอร์มลูกที่กำลังแอ๊คทีฟ โดยใช้คุณสมบัติ ActiveForm
Private Sub mnuFileClose_Click ( )
If Not (ActiveForm Is Nothing) Then Unload ActiveForm
End Sub
คุณสมบัติ ActiveForm ต้องมีการตรวจอยู่เสมอ เพื่อทำให้ทราบถึงฟอร์มปัจจุบัน
Private Sub mnuFilePrint_Click ( )
If TypeOf ActiveForm Is frmDocument Then
Printer.Print ActiveForm.txtText.Text
Printer.EndDoc
Else
Printer.Print ActiveForm.picBitmap.Picture, 0, 0
Printer.EndDoc
End If
End Sub
เมนู Window
โมดูล MDI สนับสนุนเมธอด Arrange ซึ่งไม่มีในฟอร์มธรรมดา เมธอดนี้ช่วยในการจัดฟอร์มลูกใน MDI Form โดยสามารถจัดตามแนวนอนหรือแนวตั้ง การจัดแบบ cascading หรือฟอร์ม minimized ให้เรียงลำดับที่ด้านล่างของฟอร์มแม่ MDI Form
Private Sub mnuWindowArrangeIcons_Click()
Me.Arrange vbArrangeIcons
End Sub
Private Sub mnuWindowCascade_Click()
Me.Arrange vbCascade
End Sub
Private Sub mnuWindowTileHorizontal_Click()
Me.Arrange vbTileHorizontal
End Sub
Private Sub mnuWindowTileVertical_Click()
Me.Arrange vbTileVertical
End Sub
Tip: การจัดเรียงด้วยเมธอด Arrange สามารถใช้ตัวเลือก WindowList ใน Menu Editor สำหรับเมนู window
Polymorphic MDI Containers
โปรแกรมประยุกต์ MDI ตามตัวอย่างได้กล่าวถึงฟังก์ชันอย่างสมบูรณ์ แต่ไม่ได้เป็นตัวอย่างที่ดี ในการออกแบบสำหรับ Object-Oriented programming ตามความจริง MDI Form ได้ทำลาย encapsulated ของฟอร์มลูก เพราะเข้าถึงคุณสมบัติของ txtEditor โดยตรง แต่สามารถปรับปรุงตามแนวคิด encapsulation ได้กำหนดการอินเตอร์เฟซระหว่างฟอร์มแม่กับลูก
ถ้าไม่ต้องการให้ฟอร์มแม่ MDI Form เข้าถึงฟอร์มลูกโดยตรง สามารถใช้การกำหนดอินเตอร์เฟซให้ติดต่อผ่านอีกฟอร์มหนึ่ง เช่น แทนที่การควบคุมการโหลด และบันทึกข้อความด้วยคุณสมบัติของ txtEditor แต่ให้ฟอร์มแม่ MDI Form ตามฟอร์มลูกในการโหลดหรือบันทึกไฟล์เช่นเดียวกับการตัด คัดลอก และวางข้อมูลด้วยตัว control ชื่อ txtEditor ให้ฟอร์มแม่ MDI Form ปลุกเมธอดในฟอร์มลูกให้ทำงาน ตามตัวอย่าง MDI Notepad ใช้คำสั่ง Save As บนไฟล์เมนูในฟอร์มแม่ MDI
Private Sub mnuFileSaveAs_Click()
' ถาม document เพื่อแสดง common dialog แล้วบันทึกไฟล์ด้วยชื่อที่ผู้ใช้เลือก
On Error Resume Next
ActiveForm.SaveFile ActiveForm.AskFilename(True)
End Sub
การเปลี่ยนเครื่องมือฟอร์มลูกข่าย
เมื่อมีการปรับปรุงให้ฟอร์มแม่ MDI ทำงานกับฟอร์มลูก MDI แบบ encapsulation ทำให้การเปลี่ยนเครื่องมือในฟอร์มลูกข่ายทำได้โดยอิสระ และไม่มีผลกับโปรแกรมประยุกต์ที่เหลือ เช่น การเปลี่ยนโปรแกรม MDI Notepad เป็นโปรแกรมประยุกต์ MDI Image viewer ในกรณีที่ฟอร์มลูก MDI มี picture box และปรับปรุงเครื่องมือของคุณสมบัติและเมธอดทั้งของการอินเตอร์เฟชระหว่างการสื่อสารระหว่างแม่กับลูก เช่น เมธอด PrintDoc ได้เปลี่ยนเป็น
Sub PrintDoc()
Printer.NewPage
Printer.PaintPicture picBitmap.Picture, 0, 0
Printer.EndDoc
End Sub
การปรับปรุงจากโปรแกรมประยุกต์ MDI Document เป็นโปรแกรมประยุกต์ MDI Image viewer เป็นการเปลี่ยนคำสั่งไม่กี่บรรทัด และไม่จำเป็นต้องแก้ไขคำสั่งในโมดูล frmMain ซึ่งเป็นการฟอร์มแบบใช้ใหม่ได้ของฟอร์มแม่ MDI แบบ Polymorphic การปรับปรุงฟอร์มลูก สามารถประยุกต์เป็น container ในการทำงานที่แตกต่างกันได้
Application Wizard
Application Wizard เป็นเครื่องมือในการสร้างฟอร์ม และส่วนประกอบต่างๆ ของ Visual Basic มีการแนะนำตั้งแต่ Visual Basic 5 สำหรับการสร้างฟอร์มต่างๆ เช่น ฟอร์ม Login ใน Visual Basic 6 ได้เพิ่มการทำงานที่กว้างขวางและการใช้ Toolbar Wizard และ Form Wizard ที่กว้างขวาง
การสร้าง Project ด้วย Application wizard มีขั้นตอน คือ
1. ที่เมนู File เลือกคำสั่ง New Project
2. บนหน้าจอจะแสดงไดอะล๊อกบ๊อกซ์ Add Project ให้เลือกไอคอน VB Application Wizard แล้วคลิก OK
3. บนหน้าจอจะเป็น Wizard ขั้นตอนที่ 1 เป็นการเลือกข้อมูลเดิมถ้ามีการเก็บอยู่ใน Profile แล้วคลิก Next เพื่อไปขั้นตอนต่อไป
4. Wizard ขั้นตอนที่ 2 เป็นการเลือกประเภทของฟอร์ม และตั้งชื่อ Project คลิก Next เพื่อไปขั้นตอนต่อไป
5. Wizard ขั้นตอนที่ 3 เป็นการเลือกสร้าง เมนูและเมนูย่อย แล้วคลิก Next เพื่อไปขั้นตอนต่อไป
6. Wizard ขั้นตอนที่ 4 เป็นการเลือกสร้างแถบเครื่องมือ แล้วคลิก Next เพื่อไปขั้นตอนต่อไป
7. Wizard ขั้นตอนที่ 5 เป็นการเลือกนำเข้าไฟล์ Resource เข้ามาใช้ในโปรแกรมประยุกต์ ถ้าต้องการให้คลิกที่ปุ่มตัวเลือก Yes แล้วคลิก Next เพื่อไปขั้นตอนต่อไป
8. Wizard ขั้นตอนที่ 6 เป็นการกำหนดการใช้ Browser สำหรับการใช้อินเตอร์เน็ตในโปรแกรม แล้วคลิก Next เพื่อไปขั้นตอนต่อไป
9. Wizard ขั้นตอนที่ 7 เป็นการเลือกฟอร์มมาตรฐานที่มีให้เข้ามาใช้ในโปรแกรม แล้วคลิก Next เพื่อไปขั้นตอนต่อไป
10. Wizard ขั้นตอนที่ 8 สำหรับการประยุกต์ฐานข้อมูล ถ้าไม่มีฟอร์มที่ติดต่อกับฐานข้อมูลสามารถใช้ Wizard นี้ โดยคลิกที่ปุ่ม Create New Form ซึ่งจะพบ Wizard ของ Data Form Wizard แล้วคลิก Next เพื่อไปขั้นตอนต่อไป
11. Wizard ขั้นตอนที่ 9 การสร้าง Project เสร็จเรียบร้อย ถ้าต้องการเก็บข้อมูลเป็น profile ไว้ให้ตั้งชื่อ แล้วคลิก Finish ยืนยันเสร็จสิ้นการสร้าง
12. เมื่อเปิดดู Project จะพบฟอร์มต่างที่เลือกพร้อมส่วนการทำงานต่างๆ เช่น ตามตัวอย่าง เลือกประเภทฟอร์ม เป็น MDI เลือกไฟล์มาตรฐาน About
|