ฟังก์ชัน CallByName
ฟังก์ชัน CallByName เป็นฟังก์ชันใหม่ใน Visual Basic 6 เพื่อใช้ในการอ้างถึงเมธอด หรือคุณสมบัติของอ๊อบเจค โดยการส่งผ่านชื่ออ๊อบเจคในฐานะอากิวเมนต์
result = CallByName(object, procname, calltype, [,argument
])
object เป็นชื่อของอ๊อบเจค procname เป็นชื่อ คุณสมบัติหรือเมธอด และ calltype เป็นค่าคงที่เพื่อระบุประเภทการเรียก มีค่าเป็น 1-vbMethod, 2-vbGet, 4-vbLet, และ 8-vbSet ถ้ามีการส่งอากิวเมนต์ต้องมีการระบุเมธอด
Dim vendor As New clsSupplier
' กำหนด คุณสมบัติ
CallByName vendor, "CompanyName", vbLet, "Line Systems"
' อ่านค่า
Print "Company name: " & CallByName(vendor, "CompanyName", vbGet)
' เมธอดของฟังก์ชันที่ต้องการ 1 อากิวเมนต์
width = CallByName(clsRectangle, " txtWidth", vbMethod, "ABC")
รายละเอียด 2 ข้อเกี่ยวกับฟังก์ชันนี้ที่มีประโยชน์
เพื่อเพิ่มความยืดหยุ่นในการติดต่อกับอ๊อบเจค ไม่ว่าจะเป็นฟังก์ชัน CallByName หรือ ฟังก์ชัน VBA ทั้งหมดมีความสามารถในการดึงรายการคุณสมบัติ และเมธอดที่เกิดกับอ๊อบเจค ในความหมายนี้ฟังก์ชัน CallByName เป็นการแก้ปัญหาได้ครึ่งหนึ่ง เพราะผู้ใช้โปรแกรมต้องสร้างชื่อคุณสมบัติด้วยตัวเอง ถ้ารู้จักชื่อเหล่าเป็นพิเศษ จะสามารถติดต่อกับคุณสมบัติและเมธอดโดยตรงด้วย dot syntax
ฟังก์ชัน CallByName เกี่ยวข้องกับอ๊อบเจคโดยผ่านกลไกการรวม ซึ่งการเข้าถึงช้ากว่าการใช้ dot syntax
กฎโดยทั่วไปจะไม่สามารถใช้กับฟังก์ชัน CallByName เมื่อสามารถเข้าถึงการใช้ dot syntax ปกติ โดยฟังก์ชันนี้ยอมให้เขียนคำสั่งแบบพารามิเตอร์ สิ่งที่น่าสนใจในการประยุกต์ คือ การตั้งค่าคุณสมบัติจำนวนมากสำหรับตัว control บนฟอร์ม สิ่งนี้มีประโยชน์เมื่อการเขียนโปรแกรมให้ผู้ใช้สามารถกำหนดฟอร์มเอง และต้องการเรียกคืน การคอนฟิกครั้งสุดท้ายใน Form_Load event
Function GetProperty(obj As Object, ParamArray props() As Variant) As String()
Dim i As Integer, res() As String
On Error Resume Next
' เตรียม array ของ res
ReDim res(LBound(props) To UBound(props)) As String
' ดึงคุณสมบัติทั้งหมด
For i = LBound(props) To UBound(props)
res(i) = vbNullChar
res(i) = props(i) & "=" & CallByName(obj, props(i), vbGet)
Next
' ตัดบรรทัดว่างออก
GetProperty = Filter(res(), vbNullChar, False)
End Function
' การกำหนดคุณสมบัติในการทำงานครั้งเดียว
Sub SetProperty(obj As Object, props() As String)
Dim i As Integer, tmp() As String
For i = LBound(props) To UBound(props)
' ดึงชื่อและค่าของ component
tmp() = Split(props(i), "=")
' กำหนดคุณสมบัติ
CallByName obj, tmp(0), vbLet, tmp(1)
Next
End Sub
เมื่อมีการใช้ฟังก์ชัน GetProperty จะต้องมีการให้รายการของคูณสมบัติที่สนใจ แต่ถ้าไม่ต้องการรายการเมื่อเรียกคืนคุณสมบัติให้ใช้ SetProperty
Dim callprop s() String
callprops() = GetProperty(txtEditor, "Text", "ForeColor", "BackColor")
SetProperty txtEditor, callprops()
Attribute
การกำหนด class module ทั้งหมด ไม่สามารถทำได้ใน Code window ตามข้อเท็จจริงต้องกำหนด attribute ที่สำคัญ จำนวนหนึ่งใน class module
Attribute ของ Class Module
การแก้ไข attribute ของ class module แก้ไขได้ในตารางคุณสมบัติ และ มี 6 attribute คือ Name, DataBindingBehavior, DataSourceBehavior, Instancing, MTSTransactionMode และ Persistable
|