thongkorn โพสต์ 2018-12-7 12:29:16

[VB.NET] การเปิดฟอร์มลูก (MDI Child Form) ให้แสดงผลแบบอยู่บนสุด (Modal)

http://www.g2gnet.com/webboard/images/vbnet/mdichildmodal.png

หากใครที่ติดตามผลงานของแอดมินมาตลอด ให้สังเกตว่าเวลาที่แอดมินออกแบบหน้าตาโปรแกรม เพื่อให้เกิด ความเป็นมิตรกับผู้ใช้ (User-Friendly) มากที่สุด แอดมินจะสร้างหน้าจอ (ฟอร์ม) ให้ User ใช้งานเพียงหน้าจอเดียว เช่น หน้ารายการขายสินค้า เวลาเลือกรายชื่อลูกค้าเข้ามา ก็จะเกิดการเปิดฟอร์มลูกค้าขึ้นมาเพื่อให้เลือก หรือเพิ่ม หรือแก้ไขได้เลยทันที โดยไม่ต้องปิดฟอร์มการขาย แล้วกลับไปทำรายการลูกค้าก่อน หรือแม้แต่การเลือกรายชื่อสินค้า หรืออื่นๆ ก็จะใช้วิธีเดียวกัน เรื่องแบบนี้มันต้องมีเงี่ยนงำแน่ๆ 5555+ ...

ติ๊บเล็กๆนี้สำคัญมาก ในการทำฟอร์มลูก (MDI Child Form) สามารถแสดงผลฟอร์มแบบอยู่บนสุดได้ หรือที่เราเรียกว่า Modal (หากไม่ใช่เราเรียกว่า Modaless) ซึ่งใน VB6 มันทำไม่ได้ หากเรากำหนดให้มันเป็นฟอร์มลูก (SDI - Single Document Inteface) ของ MDI Form (Multiple Document Interface) แต่สำหรับ VB.NET กลับทำได้ง่ายดายมาก ความสำคัญมันอยู่ที่ตอนนำไปใช้งาน ...

มาดูโค้ด(ง่ายๆ)กันเถอะ ... (สำหรับ MDI Form)
Public Class MDIForm

    Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click
      '// แจ้งว่าไม่ใช่เกิดการเรียกฟอร์มแบบ Modal
      blnSubForm = False
      '// มีการเปิดฟอร์มค้างไว้บนหน้าจอหรือไม่
      If Application.OpenForms().OfType(Of Form1).Any Then
            With Form1
                .Focus()
            End With

            '// ไม่มีการเปิดฟอร์ม ก็ทำการเปิดขึ้นมาใหม่ โดยกำหนดให้เป็น Form1 เป็นฟอร์มลูกของ MDIForm
      Else
            With Form1
                '// กำหนดฟอร์ม Form1 ให้เป็นฟอร์มลูกของฟอร์มหลัก
                .MdiParent = Me
                .Show()
            End With
      End If
    End Sub

    Private Sub ToolStripButton2_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton2.Click
      blnSubForm = False
      '/
      If Application.OpenForms().OfType(Of Form2).Any Then
            With Form2
                .Focus()
            End With
      Else
            With Form2
                .MdiParent = Me
                .Show()
            End With
      End If
    End Sub

End Class
โค้ดสำหรับการเรียกเปิดจากฟอร์มลูก (MDI Child Form) ...
Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      '// หากเป็นฟอร์มแบบ Modal ให้ปิดการมองเห็นของปุ่ม
      If blnSubForm Then
            Button1.Visible = False
      Else
            Button1.Visible = True
      End If
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      '// เปิดฟอร์มแบบ Modal
      blnSubForm = True
      '// สร้าง Instance Name ของ Form2 ขึ้นมาใหม่
      Dim frm As New Form2
      '// โชว์ฟอร์มแบบ Modal
      frm.ShowDialog()
    End Sub
End Class
สิ่งที่สำคัญคือ การใช้ตัวแปรแบบ Public ในการกำหนดการแสดงผล เวลาที่ฟอร์มลูกมันถูกเรียกขึ้นมาใช้งานในแต่ละครั้ง ...
Module Module1
    Public blnSubForm As Boolean
End Module
ดาวน์โหลดโค้ด VB.NET (2010) ได้ที่นี่ ...

araban โพสต์ 2020-2-4 13:11:43

ขอบคุณครับอาจารย์

jaricha5 โพสต์ 2020-4-20 15:49:35

ขบคุณครับ

hot2 โพสต์ 2020-7-8 19:20:07

ขอบคุณครับ ตอนนี้ไล่อ่าน vb.net มันยากใช้ได้เลยครับ

thongkorn โพสต์ 2020-7-8 22:42:01

hot2 ตอบกลับเมื่อ 2020-7-8 19:20
ขอบคุณครับ ตอนนี้ไล่อ่าน vb.net มันยากใช้ได้เลยครับ

ผมก็ต้องใช้เวลาพอสมควรครับ ... เป็นปี 5555+

hot2 โพสต์ 2020-7-9 21:43:24

คงเวียนๆมาถามบ่อยๆละครับ
หน้า: [1]
ดูในรูปแบบกติ: [VB.NET] การเปิดฟอร์มลูก (MDI Child Form) ให้แสดงผลแบบอยู่บนสุด (Modal)