Visual Basic

Home

Visual Basic Tutorial
Knowledge Developer Database Internet Resource
Class
1. Class
2. Property Procedure
3. คุณสมบัติ
4. ฟังก์ชัน Callback
5. คีย์เวิร์ด
 
Visual Basic Tutorial
1. Visual Basic 6
2. ฟอร์ม
3. Intrinsic Control
4. ตัวแปรและ Procedure
5. Class
6. Common Control1
7. Common Control2
8. ActiveX Control
9. Interface
10. ฐานข้อมูล
11. Database Control
 
Developer
Visual Basic
Microsoft Access
Microsoft Excel
 

ฟังก์ชัน 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

 

  

สงวนลิขสิทธิ (C) widebase