以 Excel VBA 為例Set R1 = Range("A1") '----> 成功傳回 Range "物件" R1 = Range("A1") '----> 照樣成功傳回 數值================ 請問 ==========================若要用 VB6 的 Class 來寫 , 如何辦到上述我實在想不出來例如' == 建立一個 Class 名叫 Test Public Property Get Q() As Variant Q = Form1.Text1.Text ' Form1 上的 TextBox 物件End Property' == Private Sub Form_Load()
Dim A As New Test P = A.Q ' 成功
Set Q = A.Q ' 當然會失敗 , 因為根本不是一個物件 End Sub若改寫成Public Property Get Q() As Variant Q = Form1.Text1 ' Form1 上的 TextBox 物件End Property' == Private Sub Form_Load()
Dim A As New Test P = A.Q ' 當然會失敗, 因為它是物件 , 所以一定要用 Set Set Q = A.Q ' 成功End Sub
就是無法辦到
P = A.Q ' 成功
Set Q = A.Q ' 照樣成功
Dim A As New Test P = A.Q ' 成功
Set Q = A.Q ' 當然會失敗 , 因為根本不是一個物件 End Sub若改寫成Public Property Get Q() As Variant Q = Form1.Text1 ' Form1 上的 TextBox 物件End Property' == Private Sub Form_Load()
Dim A As New Test P = A.Q ' 當然會失敗, 因為它是物件 , 所以一定要用 Set Set Q = A.Q ' 成功End Sub
就是無法辦到
P = A.Q ' 成功
Set Q = A.Q ' 照樣成功
Public Q As VariantPrivate Sub Form_Load()
Set Q = Text1
End Sub然后在form1中你可以这样写:
Dim b As Variant
Load Form2
Set b = Form2.Q
MsgBox b或
Dim b As Variant
Load Form2b = Form2.Q
MsgBox b你运行试试,两段代码都会msgbox出form2的text1.text.
对...到这里你应该已经明白了,这个就是VB6比较NC的对象默认属性的问题(个人这样感觉.呵呵..)..VBA里也是这个原理的
大大 我理解你說的但是你舉的實例是例外因為 Set Q = Text1
Q = Text1TextBox 本來就不是VB6 寫出來的控件 , 所以它能辦到上述功能============== 後來我想想VB6 的 Class 應該是少設計一樣東西, 所以無法辦到這個功能Public Property Get Q() As Variant
Q = Form1.Text1.text
End PropertyPublic Property Let Q(ByVal vNewValue As Variant)
End PropertyPublic Property Set Q(ByVal vNewValue As Variant)
End Property注意到一件事"賦值" 可以有 2種 選擇 Property Let Q 或 Property Set Q可是讀值 "卻" 只有 1種 選擇 Property Get Q"如果" 讀值多增加 1種 選擇 叫 Property SetGet Q
那是不是就可以寫成Public Property SetGet Q() As Variant
Set Q = Form1.Text1
End Property那是不是就能辦到上述功能
http://99inf.net/SoftwareDev/VB/12097.htm
這個用法我知道 , 我有在用==============
我覺得 VB 辦不到這個功能 , 就是如下Private Sub Form_Load() Dim A As New Test Set A = Text ' ----> VB 自己知道要去執行 Property Set Q
A = Text ' ----> VB 自己知道要去執行 Property Let Q R = A -----> VB 自己知道要去執行 Property Get Q Set R = A -----> VB 要去執行誰 ?? 發現她 "還是" 跑去執行 Property Get Q ,
因為 VB "讀值方面" 只有設計 Property Get Q
如果 VB "多" 設計 Property SetGet Q
那麼 Set R = A 是不是 VB 就可以去抓 Property SetGet Q
Property Get Q 負責傳回 "數值"
Property SetGet Q 負責傳回 "對象指針"
那問題是不是就解決了
End Sub
A = Text 是不是一樣也無法辦到 Set A = Text
end propertyproperty let R1(byval v as variant)
end property
当一个对象的类有默认属性的时候,赋值操作可以使用这个对象的默认属性.
比如:
TextBox 的默认属性是Text属性.
这样你可以把它当作属性来使:
dim s as string
s = Text1
又可以把它当作对象
dim t as textbox
set t = Text1