ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 11850|ตอบกลับ: 5

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

[คัดลอกลิงก์]

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5973



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

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

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

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

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

  19.     Private Sub ToolStripButton2_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton2.Click
  20.         blnSubForm = False
  21.         '/
  22.         If Application.OpenForms().OfType(Of Form2).Any Then
  23.             With Form2
  24.                 .Focus()
  25.             End With
  26.         Else
  27.             With Form2
  28.                 .MdiParent = Me
  29.                 .Show()
  30.             End With
  31.         End If
  32.     End Sub

  33. End Class
คัดลอกไปที่คลิปบอร์ด

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

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

  10.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  11.         '// เปิดฟอร์มแบบ Modal
  12.         blnSubForm = True
  13.         '// สร้าง Instance Name ของ Form2 ขึ้นมาใหม่
  14.         Dim frm As New Form2
  15.         '// โชว์ฟอร์มแบบ Modal
  16.         frm.ShowDialog()
  17.     End Sub
  18. End Class
คัดลอกไปที่คลิปบอร์ด

สิ่งที่สำคัญคือ การใช้ตัวแปรแบบ Public ในการกำหนดการแสดงผล เวลาที่ฟอร์มลูกมันถูกเรียกขึ้นมาใช้งานในแต่ละครั้ง ...
  1. Module Module1
  2.     Public blnSubForm As Boolean
  3. End Module
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ด VB.NET (2010) ได้ที่นี่ ...

WinFormMDI.zip

22.46 KB, ดาวน์โหลดแล้ว: 12497

สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

2

กระทู้

4

โพสต์

62

เครดิต

Member

Rank: 2

เครดิต
62
โพสต์ 2020-2-4 13:11:43 | ดูโพสต์ทั้งหมด

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

0

กระทู้

13

โพสต์

40

เครดิต

Newbie

Rank: 1

เครดิต
40
โพสต์ 2020-4-20 15:49:35 | ดูโพสต์ทั้งหมด

ขบคุณครับ

1

กระทู้

15

โพสต์

83

เครดิต

Member

Rank: 2

เครดิต
83
โพสต์ 2020-7-8 19:20:07 จากอุปกรณ์พกพา | ดูโพสต์ทั้งหมด

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

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5973
 เจ้าของ| โพสต์ 2020-7-8 22:42:01 | ดูโพสต์ทั้งหมด

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

ผมก็ต้องใช้เวลาพอสมควรครับ ... เป็นปี 5555+
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

15

โพสต์

83

เครดิต

Member

Rank: 2

เครดิต
83
โพสต์ 2020-7-9 21:43:24 จากอุปกรณ์พกพา | ดูโพสต์ทั้งหมด

คงเวียนๆมาถามบ่อยๆละครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-3-29 17:14 , Processed in 0.249250 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้