สร้างวัตถุ
วิธีที่ง่ายที่สุดในการสร้างวัตถุคือการ คลิกสองครั้งที่ตัวควบคุมในกล่องเครื่องมือ อย่างไรก็ตาม เพื่อใช้ประโยชน์จากออบเจ็กต์ทั้งหมดที่มีอยู่ใน Visual Basic และจากแอปพลิเคชันอื่นๆ คุณสามารถใช้ความสามารถในการเขียนโปรแกรมของ Visual Basic เพื่อสร้างออบเจ็กต์ ณ รันไทม์ได้
1. สร้างการอ้างอิงวัตถุด้วยตัวแปรวัตถุ
2. ใช้โมดูลคลาสเพื่อสร้างวัตถุของคุณเอง "ตั้งแต่เริ่มต้น"
3. สร้างคอลเลกชันของคุณเองโดยใช้วัตถุคอลเลกชัน
รายละเอียด เกี่ยวกับวิธีการเข้าถึงออบเจ็กต์มีอยู่ในบทอื่นๆ ตัวอย่างเช่น ฟังก์ชัน CreateObject และ GetObject จะถูกกล่าวถึงในบทที่ 10 "การเขียนโปรแกรมด้วยส่วนประกอบ"
ใช้ตัวแปรวัตถุ
นอกจากการเก็บค่าแล้ว ตัวแปรยังสามารถอ้างอิงอ็อบเจ็กต์ได้ เช่นเดียวกับการกำหนดค่าให้กับตัวแปร คุณสามารถกำหนดวัตถุให้กับตัวแปรได้ด้วยเหตุผลเดียวกัน:
1. ชื่อตัวแปรมักจะสั้นกว่าและจดจำได้ง่ายกว่าค่าที่มีอยู่ (หรือในกรณีนี้คือวัตถุที่พวกเขาอ้างถึง)
2. เมื่อรันโค้ด ควรเปลี่ยนตัวแปรเพื่ออ้างอิงออบเจ็กต์อื่น
3. การอ้างอิงถึงตัวแปรที่มีวัตถุนั้นมีประสิทธิภาพมากกว่าการอ้างอิงวัตถุซ้ำ ๆ
การใช้ตัวแปรวัตถุจะเหมือนกับการใช้ตัวแปรปกติ ยกเว้นว่าจะมีขั้นตอนเพิ่มเติมในการกำหนดวัตถุให้กับตัวแปร:
4. ก่อนอื่นให้ประกาศตัวแปร:
DimvariableAsclass
5. จากนั้นกำหนดวัตถุให้กับตัวแปร:
ตัวแปรที่ตั้งค่าได้=วัตถุ
ประกาศตัวแปรวัตถุ
วิธีการประกาศตัวแปรอ็อบเจ็กต์จะเหมือนกับการประกาศตัวแปรอื่นๆ โดยใช้ Dim, ReDim, Static, PRivate และ Public ข้อแตกต่างเพียงอย่างเดียวคือคีย์เวิร์ดใหม่และพารามิเตอร์คลาสที่เป็นตัวเลือก ซึ่งจะแนะนำในบทนี้ ไวยากรณ์คือ:
{Dim|ReDim|Static|Private|Public}variableAs[ใหม่] คลาส
ตัวอย่างเช่น คุณสามารถประกาศตัวแปรออบเจ็กต์ที่อ้างอิงถึงแบบฟอร์มในแอปพลิเคชันของคุณที่เรียกว่า frmMain:
DimFormVarAsNewfrmMain 'ประกาศประเภทเป็น frmMain
' ตัวแปรวัตถุ
คุณยังสามารถประกาศตัวแปรอ็อบเจ็กต์ที่อ้างอิงถึงรูปแบบใดๆ ในแอปพลิเคชันของคุณ:
DimanyFormAsForm 'ตัวแปรแบบฟอร์มทั่วไป
ในทำนองเดียวกัน คุณสามารถประกาศตัวแปรออบเจ็กต์ที่สามารถอ้างอิงกล่องข้อความใดๆ ในแอปพลิเคชันของคุณได้:
DimanyTextAsTextBox 'สามารถอ้างอิงกล่องข้อความใดก็ได้
' (แต่เป็นเพียงกล่องข้อความ)
คุณยังสามารถประกาศตัวแปรอ็อบเจ็กต์ ซึ่งสามารถอ้างอิงถึงการควบคุมประเภทใดก็ได้:
DimanyControlAsControl 'ตัวแปรควบคุมทั่วไป
โปรดทราบว่าคุณสามารถประกาศตัวแปรแบบฟอร์มที่อ้างอิงถึงแบบฟอร์มเฉพาะในแอปพลิเคชันของคุณได้ แต่คุณไม่สามารถประกาศตัวแปรควบคุมที่อ้างอิงถึงตัวควบคุมเฉพาะได้ คุณสามารถประกาศตัวแปรควบคุมที่อ้างอิงถึงชนิดของตัวควบคุมเฉพาะ (เช่น กล่องข้อความ หรือ กล่องรายการ) แต่ไม่ใช่ตัวควบคุมเฉพาะของชนิดนั้น (เช่น txtEntry หรือ List1) อย่างไรก็ตาม คุณสามารถกำหนดการควบคุมเฉพาะให้กับตัวแปรประเภทนั้นได้ ตัวอย่างเช่น แบบฟอร์มที่มีกล่องรายการ lstSample สามารถเขียนโค้ดได้ดังนี้:
DimobjDemoAsListBox
SetobjDemo=lstSample
ตัวแปรวัตถุที่ได้รับมอบหมาย
ใช้คำสั่ง Set เพื่อกำหนดวัตถุให้กับตัวแปรวัตถุ:
ตัวแปรที่ตั้งค่าได้=วัตถุ
เมื่อใดก็ตามที่คุณต้องการให้ตัวแปรวัตถุอ้างอิงถึงวัตถุ คุณสามารถใช้คำสั่ง Set ได้
บางครั้งคุณสามารถใช้ตัวแปรอ็อบเจ็กต์ โดยเฉพาะตัวแปรควบคุม เพื่อทำให้โค้ดที่คุณพิมพ์สั้นลงได้โดยตรง ตัวอย่างเช่น รหัสต้นฉบับมีลักษณะดังนี้:
IffrmAccountDisplay!txtAccountBalance.Text<0จากนั้น
frmAccountDisplay!txtAccountBalance.BackColor=0
frmAccountDisplay!txtAccountBalance.ForeColor=255
สิ้นสุดถ้า
หากคุณใช้ตัวแปรควบคุม โปรแกรมของคุณอาจจะสั้นลงอย่างมาก:
DimBalAsTextBox
SetBal=frmAccountDisplay!txtAccountBalance
IfBal.Text<0จากนั้น
Bal.BackColor=0
บาลสีหน้า=255
สิ้นสุดถ้า
ประเภทวัตถุเฉพาะเทียบกับประเภทวัตถุทั่วไป
ตัวแปรอ็อบเจ็กต์เฉพาะจะต้องอ้างอิงถึงประเภทของอ็อบเจ็กต์หรือคลาสเฉพาะ ตัวแปรแบบฟอร์มเฉพาะสามารถอ้างอิงได้เพียงรูปแบบเดียวในแอปพลิเคชัน (แม้ว่าจะสามารถอ้างอิงได้ในหนึ่งในหลายๆ อินสแตนซ์ของแบบฟอร์มนั้น) ในทำนองเดียวกัน ตัวแปรควบคุมเฉพาะสามารถอ้างอิงถึงชนิดเฉพาะของการควบคุมในแอปพลิเคชัน เช่น กล่องข้อความ หรือ กล่องรายการ เท่านั้น โปรดดูตัวอย่าง เปิดโครงการใหม่และวางกล่องข้อความในแบบฟอร์ม เพิ่มรหัสต่อไปนี้ลงในแบบฟอร์ม:
แบบฟอร์มย่อยส่วนตัว_คลิก()
DimanyTextAsTextBox
SetanyText=ข้อความ1
anyText.Text=สวัสดี
สิ้นสุดย่อย
เรียกใช้แอปพลิเคชันและคลิกที่แบบฟอร์ม คุณสมบัติข้อความของกล่องข้อความจะเปลี่ยนเป็นสวัสดี
ตัวแปรออบเจ็กต์ทั่วไปสามารถอ้างอิงประเภทออบเจ็กต์เฉพาะประเภทใดประเภทหนึ่งได้ ตัวอย่างเช่น ตัวแปรแบบฟอร์มทั่วไปสามารถอ้างอิงแบบฟอร์มใดๆ ในแอปพลิเคชันได้ ตัวแปรควบคุมทั่วไปสามารถอ้างอิงการควบคุมใดๆ บนแบบฟอร์มใดๆ ในแอปพลิเคชันได้ โปรดดูตัวอย่าง เปิดโปรเจ็กต์ใหม่และวางตัวควบคุม Frame, Label และ CommandButton หลายตัวตามลำดับใดก็ได้บนแบบฟอร์ม เพิ่มรหัสต่อไปนี้ลงในแบบฟอร์ม:
แบบฟอร์มย่อยส่วนตัว_คลิก()
DimanyControlAsControl
SetanyControl=Form1.การควบคุม(3)
anyControl.Caption=สวัสดี
สิ้นสุดย่อย
เรียกใช้โปรแกรมและคลิกที่แบบฟอร์ม ชื่อเรื่องของตัวควบคุมที่สามที่คุณเพิ่งใส่ไว้ในแบบฟอร์มจะเปลี่ยนเป็นสวัสดี
มีออบเจ็กต์ทั่วไปสี่รายการใน Visual Basic:
ตัวแปรอ็อบเจ็กต์ทั่วไปมีประโยชน์เมื่อไม่ทราบว่า ณ รันไทม์ว่าตัวแปรอ้างถึงอ็อบเจ็กต์ประเภทใดประเภทหนึ่งหรือไม่ ตัวอย่างเช่น หากคุณต้องการเขียนโค้ดที่ใช้ได้กับแบบฟอร์มใดๆ ในแอปพลิเคชันของคุณ คุณต้องใช้ตัวแปรแบบฟอร์มทั่วไป
โปรดทราบ ว่าเนื่องจากแอปพลิเคชันสามารถมีแบบฟอร์ม MDI ได้เพียงรูปแบบเดียวเท่านั้น จึงไม่จำเป็นต้องใช้ประเภท MDIForm ทั่วไป เมื่อใดก็ตามที่คุณต้องการประกาศตัวแปรแบบฟอร์มที่อ้างอิงถึงแบบฟอร์ม MDI คุณสามารถใช้ประเภท MDIForm เฉพาะ (MDIForm1 หรือชื่อใดก็ตามที่คุณระบุในคุณสมบัติ Name ของแบบฟอร์ม MDI) แทนประเภท MDIForm ทั่วไป ที่จริงแล้ว คุณควรใช้ประเภท MDIForm เฉพาะเสมอ เนื่องจาก Visual Basic สามารถกำหนดคุณสมบัติและวิธีการที่อ้างอิงถึงประเภทแบบฟอร์มเฉพาะก่อนที่จะเรียกใช้แอปพลิเคชัน
ประเภท MDIForm ทั่วไปมีไว้เพื่อความสมบูรณ์เท่านั้น จะมีประโยชน์ใน Visual Basic เวอร์ชันอนาคตที่จะมีแบบฟอร์ม MDI หลายรูปแบบในแอปพลิเคชันเดียว
กลายเป็นวัตถุ
แบบฟอร์มมักใช้เพื่อสร้างอินเทอร์เฟซแอปพลิเคชัน แต่มักเป็นอ็อบเจ็กต์ที่โมดูลอื่นในแอปพลิเคชันเรียกใช้ แบบฟอร์มมีความเกี่ยวข้องอย่างใกล้ชิดกับโมดูลคลาส ความแตกต่างที่สำคัญระหว่างทั้งสองคือ แบบฟอร์มเป็นวัตถุที่มองเห็นได้ ในขณะที่โมดูลคลาสไม่มีส่วนต่อประสานที่มองเห็นได้
เพิ่มวิธีการและคุณสมบัติที่กำหนดเอง
คุณสามารถเพิ่มวิธีการและคุณสมบัติแบบกำหนดเองลงในแบบฟอร์มและเข้าถึงได้จากโมดูลอื่นในแอปพลิเคชัน หากต้องการสร้างวิธีการใหม่สำหรับแบบฟอร์ม ให้เพิ่มขั้นตอนที่ประกาศด้วยสาธารณะ
'วิธีการปรับแต่ง Form1.
PublicSubLateJobsCount()
-
'<คำสั่ง>
-
สิ้นสุดย่อย
กระบวนการ LateJobsCount สามารถเรียกจากโมดูลอื่นได้โดยใช้คำสั่งต่อไปนี้:
Form1.LateJobsCount
การสร้างคุณสมบัติใหม่สำหรับแบบฟอร์มนั้นง่ายพอ ๆ กับการประกาศตัวแปรสาธารณะในโมดูลแบบฟอร์ม:
PublicIDNumberAsInteger
สองคำสั่งต่อไปนี้สามารถใช้เพื่อตั้งค่าและส่งกลับค่า IDNumber ของ Form1 จากโมดูลอื่น:
Form1.IDNumber=3
Text1.Text=Form1.IDNumber
คุณยังสามารถใช้ขั้นตอนคุณสมบัติเพื่อเพิ่มคุณสมบัติแบบกำหนดเองลงในฟอร์มได้
รายละเอียด บทที่ 9 "การเขียนโปรแกรมด้วยออบเจ็กต์" ให้เนื้อหาโดยละเอียดเกี่ยวกับขั้นตอนคุณสมบัติ
โปรดทราบว่า คุณสามารถเรียกตัวแปรของแบบฟอร์มหรือวิธีการแบบกำหนดเองได้โดยไม่ต้องโหลดแบบฟอร์ม และคุณยังสามารถตั้งค่าคุณสมบัติแบบกำหนดเองของแบบฟอร์มได้ด้วย ด้วยเหตุนี้ คุณจึงสามารถเรียกใช้โค้ดเกี่ยวกับแบบฟอร์มได้โดยไม่ต้องโหลดลงในหน่วยความจำ ในทำนองเดียวกัน การอ้างอิงตัวควบคุมโดยไม่ต้องอ้างอิงคุณสมบัติหรือวิธีการจะไม่โหลดแบบฟอร์ม
ใช้คำสำคัญใหม่
ใช้คีย์เวิร์ดใหม่เพื่อสร้างออบเจ็กต์ใหม่ ซึ่งถือเป็นออบเจ็กต์ที่กำหนดโดยคลาส ใหม่ สามารถใช้เพื่อสร้างอินสแตนซ์ของคอลเลกชัน แบบฟอร์ม และคลาสที่กำหนดในโมดูลคลาส
ใช้คำสำคัญใหม่บนแบบฟอร์ม
แบบฟอร์มที่สร้างขึ้นในขณะออกแบบถือเป็นคลาส อินสแตนซ์ใหม่ของคลาสนี้สามารถสร้างได้โดยใช้คีย์เวิร์ดใหม่ เมื่อต้องการดูการดำเนินการของกระบวนการนี้ ให้วาดปุ่มคำสั่งและตัวควบคุมอื่นๆ หลายอย่างบนแบบฟอร์ม ในหน้าต่างคุณสมบัติ ให้ตั้งค่าคุณสมบัติชื่อของแบบฟอร์มเป็นตัวอย่าง เพิ่มรหัสต่อไปนี้ในขั้นตอนเหตุการณ์คลิกของปุ่มคำสั่ง:
DimxAsNewตัวอย่าง
x.แสดง
เรียกใช้แอปพลิเคชันแล้วคลิกปุ่มคำสั่งหลาย ๆ ครั้ง ย้ายแบบฟอร์มด้านหน้าสุดไปด้านข้าง เนื่องจากฟอร์มเป็นคลาสที่มีอินเทอร์เฟซแบบภาพ จึงมองเห็นสำเนาเพิ่มเติมได้ แต่ละฟอร์มมีตัวควบคุมเดียวกันในตำแหน่งเดียวกันกับที่ออกแบบฟอร์ม
โปรดทราบว่าหากต้องการสร้างตัวแปรแบบฟอร์มและอินสแตนซ์ของแบบฟอร์มที่โหลดไว้อยู่เสมอ ให้ใช้ตัวแปรแบบคงที่หรือสาธารณะแทนตัวแปรภายในเครื่อง
คุณยังสามารถใช้คำสำคัญใหม่กับคำสั่ง Set ได้อีกด้วย โปรดลองใช้รหัสในขั้นตอนเหตุการณ์คลิกของปุ่มคำสั่ง:
DimfAsForm1
Setf=แบบฟอร์มใหม่1
ฉ.คำบรรยาย=สวัสดี
ฉ.แสดง
การใช้คีย์เวิร์ด New กับคำสั่ง Set จะทำให้การดำเนินการเร็วขึ้น ดังนั้นจึงแนะนำให้ใช้วิธีนี้
ใช้คำสำคัญใหม่กับวัตถุอื่น
คุณสามารถใช้คีย์เวิร์ดใหม่เพื่อสร้างคอลเลกชันและอ็อบเจ็กต์จากคลาสที่กำหนดในโมดูลคลาสได้ ใช้ตัวอย่างต่อไปนี้เพื่อแสดงกระบวนการทำงานนี้
ตัวอย่างนี้แสดงให้เห็นว่าคีย์เวิร์ดใหม่สร้างอินสแตนซ์ของคลาสอย่างไร เปิดโครงการใหม่และวาดตัวควบคุม CommandButton บน Form1 เลือกคำสั่งเพิ่มโมดูลคลาสจากเมนูโปรเจ็กต์เพื่อเพิ่มโมดูลคลาสให้กับโปรเจ็กต์ ตั้งค่าคุณสมบัติ Name ของโมดูลคลาสเป็น ShowMe
รหัสต่อไปนี้ใน Form1 สร้างอินสแตนซ์ใหม่ของคลาส ShowMe และเรียกขั้นตอนที่มีอยู่ในโมดูลคลาส
PublicclsNewAsShowMe
PrivateSubCommand1_คลิก()
SetclsNew=NewShowMe
clsNew.ShowFrm
สิ้นสุดย่อย
ขั้นตอน ShowFrm ในโมดูลคลาสสร้างอินสแตนซ์ใหม่ของคลาส Form1 แสดงแบบฟอร์ม และจากนั้นย่อให้เล็กสุด
SubShowFrm()
DimfrmNewAsForm1
SetfrmNew=NewForm1
จากNew.Show
frmNew.WindowState=1
สิ้นสุดย่อย
หากต้องการใช้ตัวอย่างนี้ ให้เรียกใช้แอปพลิเคชันแล้วคลิกปุ่มคำสั่งหลายๆ ครั้ง คุณจะเห็นไอคอนรูปแบบย่อขนาดปรากฏบนเดสก์ท็อปเมื่อมีการสร้างอินสแตนซ์ใหม่ของคลาส ShowMe
สำหรับข้อมูลเพิ่มเติม เกี่ยวกับการใช้ New เพื่อสร้างออบเจ็กต์ โปรดดูบทที่ 10 "การเขียนโปรแกรมด้วยส่วนประกอบ"
ข้อจำกัดคำหลักใหม่
ตารางต่อไปนี้จะอธิบายสิ่งที่คุณไม่สามารถทำได้กับคำสำคัญใหม่
ปล่อยการอ้างอิงไปยังวัตถุ
ทุกอ็อบเจ็กต์ใช้หน่วยความจำและทรัพยากรระบบ เป็นแนวปฏิบัติที่ดีในการเขียนโปรแกรมที่จะปล่อยทรัพยากรเหล่านี้ทันทีเมื่อไม่มีการใช้อ็อบเจ็กต์อีกต่อไป
ใช้ Unload เพื่อยกเลิกการโหลดฟอร์มหรือตัวควบคุมจากหน่วยความจำ
ใช้ Nothing เพื่อปล่อยทรัพยากรที่ถูกครอบครองโดยตัวแปรอ็อบเจ็กต์ ใช้คำสั่ง Set เพื่อกำหนด Nothing ให้กับตัวแปรอ็อบเจ็กต์
สำหรับข้อมูลเพิ่มเติม โปรดดูส่วน "ยกเลิกการโหลดเหตุการณ์" และ "ไม่มีอะไร" ใน "คู่มืออ้างอิงภาษา Visual Basic 6.0"
ส่งต่อวัตถุไปยังขั้นตอน
วัตถุสามารถส่งผ่านไปยังขั้นตอนใน Visual Basic ได้ ในตัวอย่างโค้ดต่อไปนี้ จะถือว่าแบบฟอร์มมีตัวควบคุม CommandButton:
PrivateSubCommand1_คลิก()
'เรียกรูทีนย่อย Demo และส่งแบบฟอร์มไปให้
แบบฟอร์มสาธิต1
สิ้นสุดย่อย
PrivateSubDemo(xAsForm1)
'จัดแบบฟอร์มให้อยู่ตรงกลางหน้าจอ
x.ซ้าย=(หน้าจอ.กว้าง-x.กว้าง)/2
สิ้นสุดย่อย
คุณสามารถส่งผ่านออบเจ็กต์ไปยังพารามิเตอร์โดยการอ้างอิง จากนั้นตั้งค่าพารามิเตอร์ไปยังออบเจ็กต์ใหม่ภายในขั้นตอน หากต้องการดูการดำเนินการนี้ ให้เปิดโครงการและแทรกแบบฟอร์มที่สอง วางกล่องรูปภาพในแต่ละแบบฟอร์ม ค่าการตั้งค่าแอตทริบิวต์ที่ต้องเปลี่ยนแปลงมีดังแสดงในตารางต่อไปนี้:
ขั้นตอนเหตุการณ์ Form1_Click เรียกขั้นตอน GetPicture ใน Form2 และส่งผ่านไปยังกล่องรูปภาพว่าง
แบบฟอร์มย่อยส่วนตัว_คลิก()
Form2.GetPicturePicture1
สิ้นสุดย่อย
กระบวนการ GetPicture ใน Form2 กำหนดคุณสมบัติรูปภาพของกล่องรูปภาพบน Form2 ให้กับกล่องรูปภาพว่างบน Form1
PrivateobjXapictureBox
PublicSubGetPicture (xAsPictureBox)
'กำหนดกรอบภาพที่ส่งผ่านให้กับตัวแปรวัตถุ
SetobjX=x
'กำหนดค่าแอตทริบิวต์รูปภาพให้กับกล่องรูปภาพของ Form1
objX.Picture=picture2.รูปภาพ
สิ้นสุดย่อย
หากต้องการใช้ตัวอย่างนี้ ให้รันโปรแกรมแล้วคลิกที่ Form1 คุณจะเห็นไอคอนใน Form2 ปรากฏในกล่องรูปภาพของ Form1
รายละเอียด หัวข้อข้างต้นมีวัตถุประสงค์เพื่อให้ภาพรวมของออบเจ็กต์ สำหรับรายละเอียดเพิ่มเติม โปรดดูบทที่ 9 "การเขียนโปรแกรมด้วยออบเจ็กต์" และบทที่ 10 "การเขียนโปรแกรมด้วยส่วนประกอบ"
-