28 ม.ค.53 ปกติผมไม่เขียนเรื่องเทคนิคการโปรแกรมใน blog เพราะมีรายละเอียดมาก และเขียนไว้ในเว็บเพจอยู่แล้ว แต่หัวหน้าแนะว่าอยากให้ เขียนเรื่อง application.openforms ซึ่งเป็นวิธีการส่งค่าระหว่างฟอร์มลูกใน mdiparent ซึ่งผมเคยเขียนไว้ในเว็บเพจว่าใช้วิธีอ้างผ่าน mdiparent แต่ทั้ง 2 วิธีที่จะนำเสนอนี้มีความแต่ต่างกันชัดเจน ซึ่งผมจะเขียนเรื่องนี้ไว้ใน
+ http://www.thaiall.com/vbnet/testtoolbox.htm ขั้นตอนที่ 1 การสร้างคอนโทล เพื่อเตรียมความพร้อม สร้าง mdi parent form และ windows form ขึ้น 2 form เมื่อเปิด solution ให้เรียกทั้ง 2 ฟอร์มมาแสดงใน mdi parent form ทันที โดยใส่คำสั่งในโหลดของเอ็มดีไอ คือ dim f1 = new form1 : f1.mdiparent = me : f1.show() : dim f2 = new form2 : f2.mdiparent = me : f2.show() แล้วในฟอร์มทั้งสองมี ปุ่มและเท็คบ็อกอย่างละหนึ่ง ขั้นตอนที่ 2 ทดสอบคำสั่งที่ใช้ส่งค่าเมื่อกดปุ่ม กรณีที่ 1 กรอกข้อมูลและสั่งจากฟอร์มหนึ่งแต่มีผลในฟอร์มสอง ใส่คำสั่งในปุ่มของฟอร์มหนึ่งว่า For Each f As Object In MDIParent1.MdiChildren : If UCase(f.name) = “FORM2” Then : Dim f2 As Form2 = f : f2.TextBox1.Text = Me.TextBox1.Text : MsgBox(“wait”) : f2.Close() : End If : Next กรณีที่ 2 ทดสอบตามที่หัวหน้าแนะนำให้ใช้ application.openforms โดยสั่งจากฟอร์มสองแต่มีผลในฟอร์มหนึ่ง โดยใส่คำสั่งในปุ่มของฟอร์มสองว่า Dim f As Form : f = Application.OpenForms.Item(“form1”) : For Each i As Object In f.Controls : If UCase(i.name) = “TEXTBOX1” Then : i.text = “abc” : End If : Next : MsgBox(“wait”) : f.Close() ขั้นตอนที่ 3 อธิบายความแตกต่าง
ทั้ง 2 กรณีต่างกันที่ กรณีที่ 1 อ้างอิงฟอร์มเป้าหมายผ่าน mdiparent1 แล้ววนลูปตาม object ทั้งหมดในนั้น โดยมองหาวัตถุที่ชื่อ FORM2 เมื่อพบก็จะส่งเข้าวัตถุชิ้นใหม่ให้อ้างอิง แล้วจึงเรียกใช้ textbox1 ตามวัตถุประสงค์ แต่กรณีที่ 2 อ้างอิงฟอร์มเป้าหมายผ่าน Application.Openforms ซึ่งเรารู้ว่า Form1 เปิดอยู่ แล้วก็วนลูปเข้าไปใน controls ทั้งหมด เมื่อพบ textbox1 ก็ดำเนินการทันที