ตรวจสอบข้อมูลการควบคุมโดยการจำกัดโฟกัส
เหตุการณ์ตรวจสอบและคุณสมบัติ CausesValidation ถูกใช้ควบคู่กันเพื่อยืนยันอินพุตไปยังตัวควบคุมก่อนที่จะอนุญาตให้ผู้ใช้ย้ายโฟกัสออกจากตัวควบคุม ตัวอย่างเช่น: พิจารณาแอปพลิเคชันที่มีกล่องข้อความหลายกล่องและปุ่มวิธีใช้ เมื่อกล่องข้อความแต่ละกล่องได้รับโฟกัส คุณต้องการป้องกันไม่ให้ผู้ใช้ย้ายโฟกัสจนกว่าจะตรงตามเกณฑ์การตรวจสอบพิเศษของกล่องข้อความ คุณยังต้องการอนุญาตให้ ผู้ใช้เพื่อย้ายโฟกัสเมื่อกล่องข้อความได้รับโฟกัส สามารถคลิกปุ่มวิธีใช้ได้ตลอดเวลา เมื่อต้องการทำเช่นนี้ ให้ตั้งค่าเกณฑ์การตรวจสอบในเหตุการณ์ตรวจสอบ และตั้งค่าคุณสมบัติ CausesValidation ของปุ่มวิธีใช้เป็นเท็จ ถ้าคุณสมบัติถูกตั้งค่าเป็น True (การตั้งค่าเริ่มต้น) เหตุการณ์การตรวจสอบจะเกิดขึ้นบนตัวควบคุมแรก ถ้าคุณสมบัติถูกตั้งค่าเป็นเท็จ เหตุการณ์ตรวจสอบบนตัวควบคุมแรกจะเกิดขึ้นก่อน
เหตุการณ์ Validate เหมาะสมกว่าสำหรับการตรวจสอบความถูกต้องของการป้อนข้อมูลมากกว่าเหตุการณ์ LostFocus เนื่องจากเหตุการณ์ LostFocus (ตามคำจำกัดความ) เกิดขึ้นหลังจากที่โฟกัสถูกย้าย แต่ด้วยการใช้เหตุการณ์ตรวจสอบ คุณสามารถป้องกันไม่ให้โฟกัสย้ายไปยังตัวควบคุมอื่นได้จนกว่าจะตรงตามกฎการตรวจสอบ
การใช้งานที่เป็นไปได้
แอปพลิเคชันการป้อนข้อมูลจำเป็นต้องดำเนินการตรวจสอบการป้อนข้อมูลที่ซับซ้อนมากกว่าการตรวจสอบที่ได้รับจากตัวควบคุม MaskedEdit หรือที่เกิดขึ้นในกฎเกณฑ์ทางธุรกิจ
แบบฟอร์มจำเป็นต้องป้องกันไม่ให้ผู้ใช้ใช้คีย์ TAB หรือปุ่มเร่งความเร็วเพื่อย้ายตัวควบคุมจนกว่าจะมีการป้อนข้อมูลลงในฟิลด์
เอกสาร ActiveX ที่ทำงานอยู่ใน Internet Explorer จำเป็นต้องมีวิธีสำหรับผู้ใช้ในการทำงานกับแบบฟอร์มให้เสร็จสิ้นก่อนที่สคริปต์จะย้ายโฟกัสโดยทางโปรแกรม
เน้นการควบคุมในการตรวจสอบเหตุการณ์
เหตุการณ์ Validate มีพารามิเตอร์ Keepfocus เมื่อตั้งค่าพารามิเตอร์เป็น True ตัวควบคุมจะคงโฟกัสไว้ วิธีนี้จะป้องกันไม่ให้ผู้ใช้คลิกการควบคุมอื่นๆ ได้อย่างมีประสิทธิภาพ
การใช้อาร์เรย์ของการควบคุม
อาร์เรย์ควบคุมคือกลุ่มของตัวควบคุมที่มีชื่อและประเภททั่วไป เหตุการณ์ของพวกเขาก็เหมือนกัน อาร์เรย์ควบคุมควรมีอย่างน้อยหนึ่งองค์ประกอบ และสามารถเพิ่มจำนวนองค์ประกอบได้ภายในขอบเขตที่อนุญาตโดยทรัพยากรระบบและหน่วยความจำ ขนาดของอาร์เรย์ยังขึ้นอยู่กับหน่วยความจำและทรัพยากร Windows ที่จำเป็นสำหรับการควบคุมแต่ละรายการ ค่าดัชนีสูงสุดที่มีอยู่ในอาร์เรย์ควบคุมคือ 32767 องค์ประกอบในอาร์เรย์ควบคุมเดียวกันมีการตั้งค่าคุณสมบัติของตัวเอง การใช้งานทั่วไปสำหรับอาร์เรย์ควบคุมรวมถึงการใช้การควบคุมเมนูและการจัดกลุ่มปุ่มตัวเลือก
โปรดทราบ ว่า Visual Basic มีความสามารถในการเพิ่มการควบคุมที่ไม่ได้อ้างอิงไปยังคอลเลกชันการควบคุมในขณะรันไทม์แบบไดนามิก หัวข้อนี้อ้างอิงถึงตัวควบคุมการอ้างอิงที่ถูกเพิ่มในเวลาออกแบบโดยการตัดและวางตัวควบคุมลงในแบบฟอร์มเท่านั้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มการควบคุม ณ รันไทม์ โปรดดูหัวข้ออ้างอิง "วิธีการเพิ่ม (คอลเลกชันการควบคุม)" และ "วิธีการเพิ่ม (คอลเลกชันใบอนุญาต)"
เหตุใดจึงต้องใช้อาร์เรย์ควบคุม
ในขณะออกแบบ การเพิ่มตัวควบคุมโดยใช้อาร์เรย์ควบคุมจะใช้ทรัพยากรน้อยกว่าการเพิ่มตัวควบคุมชนิดเดียวกันหลายตัวลงในแบบฟอร์มโดยตรง อาร์เรย์ควบคุมยังมีประโยชน์เมื่อคุณต้องการให้ตัวควบคุมหลายตัวแชร์โค้ด ตัวอย่างเช่น หากคุณสร้างอาร์เรย์ควบคุมที่มีปุ่มตัวเลือกสามปุ่ม โค้ดเดียวกันจะถูกดำเนินการไม่ว่าจะคลิกปุ่มใดก็ตาม
เมื่อต้องการสร้างอินสแตนซ์ใหม่ของตัวควบคุม ณ รันไทม์ ตัวควบคุมใหม่จะต้องเป็นสมาชิกของอาร์เรย์ตัวควบคุม เมื่อใช้อาร์เรย์ของการควบคุม สมาชิกใหม่แต่ละคนจะสืบทอดขั้นตอนเหตุการณ์สาธารณะของอาร์เรย์
ไม่สามารถสร้างการควบคุมใหม่ขณะรันไทม์โดยใช้กลไกอาร์เรย์ควบคุมได้ เนื่องจากแต่ละการควบคุมใหม่จะสืบทอดขั้นตอนเหตุการณ์ที่เขียนขึ้นสำหรับอาร์เรย์ ตัวอย่างเช่น หากคุณมีกล่องข้อความหลายกล่องในแบบฟอร์มของคุณ และกล่องข้อความแต่ละกล่องยอมรับค่าวันที่ คุณสามารถสร้างอาร์เรย์ของตัวควบคุมเพื่อให้กล่องข้อความทั้งหมดใช้รหัสตรวจสอบเดียวกัน
แอปพลิเคชันตัวอย่าง: Calc.vbp
แอปพลิเคชันตัวอย่างเครื่องคิดเลขที่แสดงในรูปที่ 7.2 (แสดงอยู่ในไดเร็กทอรี Samples!Alink(vbsamples)) มีอาร์เรย์ควบคุมสองชุด ได้แก่ ปุ่มตัวเลขและปุ่มการดำเนินการ
โปรดสังเกตว่าตัวอย่างใช้ไวยากรณ์ของวัตถุ (ดัชนี) เพื่ออ้างอิงแต่ละตัวควบคุมอย่างไร ระบุค่าดัชนีเมื่อสร้างตัวควบคุม ในความเป็นจริง การระบุดัชนีที่กำหนดเองสำหรับการควบคุม ณ เวลาออกแบบจะทำให้ส่วนควบคุมของอาร์เรย์
คุณสมบัติดัชนีแยกแยะองค์ประกอบในอาร์เรย์ควบคุม เมื่อตัวควบคุมในอาร์เรย์รู้จักเหตุการณ์ Visual Basic จะเรียกขั้นตอนเหตุการณ์สาธารณะและส่งผ่านพารามิเตอร์ (ค่าของคุณสมบัติดัชนี) เพื่อระบุตัวควบคุมที่จดจำเหตุการณ์นั้น
ตัวอย่างเช่น บรรทัดแรกของโค้ดในขั้นตอนเหตุการณ์ Number_Click มีลักษณะดังนี้:
PRivateSubNumber_Click(IndexAsInteger)
ถ้า Number(0) ระบุเหตุการณ์ VisualBasic จะส่ง 0 เป็นพารามิเตอร์ดัชนี และถ้า Number(1) ระบุเหตุการณ์ VisualBasic จะส่ง 1 เป็นพารามิเตอร์ดัชนี ไม่เหมือนกับค่าดัชนี ส่วนที่เหลือของโค้ด Number_Click ที่ถูกดำเนินการจะเหมือนกันสำหรับ Number(0) ถึง Number(9)
สร้างอาร์เรย์ควบคุมในขณะออกแบบ
มีสามวิธีในการสร้างอาร์เรย์ควบคุมในขณะออกแบบ:
1. ตั้งชื่อเดียวกันให้กับหลายตัวควบคุม
2. คัดลอกตัวควบคุมที่มีอยู่และวางลงในแบบฟอร์ม
3. ตั้งค่าคุณสมบัติดัชนีของตัวควบคุมเป็นค่าที่ไม่ใช่ Null
โปรดทราบว่าต้องสร้างอาร์เรย์ควบคุมเมนูในตัวแก้ไขเมนู สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการนี้ โปรดดู "การสร้างและการแก้ไขเมนู ณ รันไทม์" ในบทที่ 6 "การสร้างอินเทอร์เฟซผู้ใช้"
ในการเพิ่มองค์ประกอบอาร์เรย์ควบคุมโดยการเปลี่ยนชื่อการควบคุม:
1. วาดตัวควบคุมที่จะเพิ่มในอาร์เรย์ควบคุม (ต้องเป็นตัวควบคุมประเภทเดียวกัน) เพื่อกำหนดว่าตัวควบคุมใดจะเป็นองค์ประกอบแรกในอาร์เรย์
2. เลือกตัวควบคุมและเปลี่ยนค่าการตั้งค่าชื่อเป็นค่าการตั้งค่าชื่อขององค์ประกอบแรกของอาร์เรย์
3. เมื่อคุณป้อนชื่อที่มีอยู่สำหรับตัวควบคุมในอาร์เรย์ Visual Basic จะแสดงกล่องโต้ตอบเพื่อขอให้ยืนยันว่าคุณต้องการสร้างอาร์เรย์ควบคุมหรือไม่ ณ จุดนี้เลือก "ตกลง" เพื่อยืนยันการดำเนินการ
ตัวอย่างเช่น ถ้าองค์ประกอบแรกของอาร์เรย์ควบคุมชื่อ cmdCtlArr ให้เลือก CommandButton เพิ่มลงในอาร์เรย์ และตั้งชื่อเป็น cmdCtlArr ในขณะนี้ ข้อความต่อไปนี้จะปรากฏขึ้น: "ตัวควบคุมชื่อ 'cmdCtlArr' มีอยู่แล้ว คุณต้องการสร้างอาร์เรย์ของการควบคุมหรือไม่" เลือก ตกลง เพื่อยืนยันการดำเนินการ
การควบคุมที่เพิ่มด้วยวิธีนี้จะแชร์เฉพาะคุณสมบัติชื่อและประเภทการควบคุมเท่านั้น คุณสมบัติอื่น ๆ มีค่าเหมือนกับเมื่อวาดการควบคุมในตอนแรก
หากต้องการเพิ่มองค์ประกอบอาร์เรย์ควบคุมโดยการคัดลอกตัวควบคุมที่มีอยู่:
1. วาดส่วนควบคุมในอาเรย์ควบคุม
2. เมื่อส่วนควบคุมได้รับโฟกัส ให้เลือกคำสั่ง "คัดลอก" ในเมนู "แก้ไข"
3. ในเมนู "แก้ไข" เลือกคำสั่ง "วาง" Visual Basic จะแสดงกล่องโต้ตอบถามว่าจะยืนยันการสร้างอาร์เรย์ควบคุมหรือไม่ เลือก ตกลง เพื่อยืนยันการดำเนินการ ค่าดัชนีที่กำหนดให้กับตัวควบคุมคือ 1 การควบคุมแรกที่ดึงออกมามีค่าดัชนี 0
ค่าดัชนีขององค์ประกอบอาร์เรย์ใหม่แต่ละรายการจะเหมือนกับลำดับที่เพิ่มลงในอาร์เรย์ควบคุม เมื่อคุณเพิ่มตัวควบคุมเช่นนี้ คุณสมบัติการมองเห็นส่วนใหญ่ เช่น ความสูง ความกว้าง และสี จะถูกคัดลอกจากตัวควบคุมแรกในอาร์เรย์ไปยังตัวควบคุมใหม่
เพิ่มอาร์เรย์ควบคุมที่รันไทม์
ณ รันไทม์ คุณสามารถใช้คำสั่ง Load และ Unload เพื่อเพิ่มและลบตัวควบคุมออกจากอาร์เรย์ควบคุม อย่างไรก็ตาม ตัวควบคุมที่เพิ่มเข้ามาจะต้องเป็นองค์ประกอบของอาร์เรย์ควบคุมที่มีอยู่ คุณต้องสร้างตัวควบคุมด้วย (ในกรณีส่วนใหญ่) คุณสมบัติดัชนีเป็น 0 ในขณะออกแบบ จากนั้นใช้ไวยากรณ์ต่อไปนี้ขณะรันไทม์:
เมื่อโหลดองค์ประกอบใหม่ของอาร์เรย์ควบคุม การตั้งค่าคุณสมบัติส่วนใหญ่จะถูกคัดลอกจากองค์ประกอบที่มีอยู่ในอาร์เรย์ที่มีตัวห้อยน้อยที่สุด ในกรณีนี้คือองค์ประกอบที่มีดัชนี 0 เนื่องจากการตั้งค่าคุณสมบัติ Visible, Index และ TabIndex จะไม่ถูกคัดลอกไปยังองค์ประกอบใหม่ในอาเรย์ควบคุมโดยอัตโนมัติ เพื่อให้มองเห็นการควบคุมที่เพิ่มใหม่ได้ คุณสมบัติ Visible จะต้องตั้งค่าเป็น True
โปรดทราบ ว่า Visual Basic จะสร้างข้อผิดพลาดเมื่อพยายามใช้คำสั่ง Load ในค่าดัชนีที่มีอยู่แล้วในอาร์เรย์
จุดสำคัญคือ สามารถใช้คำสั่ง Unload เพื่อลบการควบคุมทั้งหมดที่สร้างโดยคำสั่ง Load อย่างไรก็ตาม Unload ไม่สามารถลบการควบคุมที่สร้างขึ้นในขณะออกแบบได้ โดยไม่คำนึงว่าจะเป็นส่วนหนึ่งของอาร์เรย์ควบคุมหรือไม่
รูปแบบการควบคุม: การเพิ่มและการลบการควบคุมในอาเรย์ควบคุม
วิธีการเพิ่มและลบตัวควบคุม ณ รันไทม์จะแสดงอยู่ในตัวอย่างชุดควบคุม โดยที่ตัวควบคุมคือปุ่มตัวเลือก ตามตัวอย่างนี้ ผู้ใช้สามารถเพิ่มปุ่มตัวเลือกเพื่อเปลี่ยนสีพื้นหลังของกล่องรูปภาพได้
ดังแสดงในรูปที่ 7.3 ให้เริ่มแบบฟอร์ม จากนั้นวาดกล่องรูปภาพ ป้ายชื่อ ปุ่มตัวเลือกสองปุ่ม และปุ่มคำสั่งสามปุ่มบนนั้น
ควบคุมเหตุการณ์แอปพลิเคชันอาร์เรย์
ถัดไป คุณต้องเพิ่มขั้นตอนเหตุการณ์สำหรับปุ่มตัวเลือกและปุ่มคำสั่ง เริ่มแอปพลิเคชันหลังจากเพิ่มการประกาศแบบฟอร์ม:
DimMaxIdAsInteger
ปุ่มตัวเลือกทั้งหมดแชร์ขั้นตอนเหตุการณ์การคลิก:
PrivateSuboptButton_Click (ดัชนี AsInteger)
picDisplay.BackColor=QBColor(ดัชนี 1)
สิ้นสุดย่อย
เพิ่มปุ่มตัวเลือกใหม่ผ่านขั้นตอนการคลิกเหตุการณ์ของปุ่มคำสั่ง "เพิ่ม" ในตัวอย่างนี้ ก่อนที่จะดำเนินการคำสั่ง Load โค้ดจะตรวจสอบเพื่อให้แน่ใจว่ามีการโหลดปุ่มตัวเลือกไม่เกินสิบปุ่ม หลังจากโหลดตัวควบคุมแล้ว คุณสมบัติ Visible จะต้องตั้งค่าเป็น True
PrivateSubcmdAdd_Click()
IfMaxId=0ThenMaxId=1 'ตั้งค่าปุ่มตัวเลือกทั้งหมด
IfMaxId>8ThenExitSub 'อนุญาตให้ใช้เพียงสิบปุ่มเท่านั้น
MaxId=MaxId 1 'จำนวนปุ่มเพิ่มขึ้น
LoadoptButton(MaxId) 'สร้างปุ่มใหม่'
optButton(0).SetFocus 'ตัวเลือกปุ่มรีเซ็ต
'วางปุ่มใหม่ไว้ด้านล่างปุ่มก่อนหน้า
optButton(MaxId).Top=optButton(MaxId-1)._
ท็อป 400
optButton(MaxId).Visible=True 'แสดงปุ่มใหม่'
optButton(MaxId).Caption=Option&MaxId 1
สิ้นสุดย่อย
ลบปุ่มตัวเลือกผ่านขั้นตอนเหตุการณ์คลิกของปุ่มคำสั่ง Delete:
PrivateSubcmdDelete_Click()
IfMaxId<=1ThenExitSub 'คงปุ่มสองปุ่มแรกไว้
UnloadoptButton(MaxId) 'ลบปุ่มสุดท้าย'
MaxId=MaxId-1 'จำนวนปุ่มลดลง
optButton(0).SetFocus 'ตัวเลือกปุ่มรีเซ็ต
สิ้นสุดย่อย
สิ้นสุดแอปพลิเคชันโดยใช้ขั้นตอนเหตุการณ์การคลิกปุ่มปิด:
PrivateSubcmdClose_Click()
ยกเลิกการโหลดฉัน
สิ้นสุดย่อย
-