วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2551

การเข้าถึง Object ระหว่างคลาสภาค 2

Form1 , ClassManageForm1 , Form2
เมื่อฟอร์ม 1 ให้ ClassManageForm1 เป็นตัวจัดการ Query ข้อมูล dataset มาสักอย่าง
หลักแห่งการจำ
1. คลาสที่จะขอเข้าไปใช้งานคอนโทรลนั้นต้อง
'--- ClassManageForm1
Public F1 as Form1
Public Sub LoadData()
....
..
.
End Sub
2. คลาสที่คอนโทรลโดนใช้งานต้อง
'--- Form 1
Public C as new ClassManageForm1
Public Sub New ()
C.F1 = Me
End Sub
เท่านี้ ClassManageForm1 ก็สามารถ Assign ค่าโดยตรงให้กับฟอร์มได้ ที่นี้มาดูส่วนเพิ่ม
ถ้าเกิดว่าฟอร์ม 2 จะเข้ามาใช้งาน Sub LoadData นั้น มันจะต้องเข้าผ่านทาง Form1
( วิธีอื่นทำแล้วไม่ผ่าน ใครรู้ช่วยบอกทีครับ )
ถ้าเรา ไป Dim C as new ClassManageForm1
แล้วใช้ C.LoadData ผ่านทางฟอร์ม 2 เพื่อที่ให้ ฟอร์ม 1 Refresh ข้อมูลแล้หล่ะก็
มันจะ Error ว่าเราไม่ New ก่อนใช้ ถ้าเราไป New ก่อนใช้ มันก็จะเป็นอีก Object นึงละ
มันจะไมใช่ Obj เดิม
อธิบายมาซะยาว ( ทบทวนความเข้าใจตัวเอง - -a ) วิธีการนั้นคือ
ตอนที่เราเปิดฟอร์ม 2 ขึ้นมาให้ส่ง Me เข้าไป
'--- Form 1 อนุญาต ให้ฟอร์ม 2 เข้ามาใช้ ก็ใช้หลักการ 3 ข้อข้างบน
'------ ฟอร์มที่ถูกอ้างอิงต้อง New แล้วส่ง Me
Public C as new ClassManageForm1 <<< ต้องเป็น Public เท่าน้นเพื้อให้ F2 เห็น
Public ( Private ก็ได้นะ ) F2 as Form2
Public Sub New ()
C.F1 = Me
End Sub
Private Sub OpenForm2() '-- ป้องกันการเปิดหน้าต่างซ้ำ
Dim f as form
Dim Main as Form MainPage << ผมทำเป็น Mdi MainPage คือ ฟอร์มแม่
For each f in Main.MdiChildren
If (TypeOf F is Form2) then
f.activate
exit sub
End if
Next
F2 = New Form2
F2.RefF1 = Me
F2.MdiParent = Main
F2.Show
'--------------------------------- อันนี้เรียบร้อย สำหรับฟอร์ม 1
'--- Form 2 ก็เข้าหลักการว่า ให้อ้างถึงฟอร์ม 1 และเป็น PUblic เท่านั้น
Public RefF1 as Form1
Private Sub AddData()
...
..
.
RefF1.C.LoadData() <<<<< เวลาเรียกใช้ให้ทำแบบนี้
ให้เข้าผ่าน Form1 แล้วค่อยเข้าไปใน ClassManageForm1 โดยผ่าน .
จบข่าว

ไม่มีความคิดเห็น: