2013-03-24 66 views
2

我可以使用CallByName(換句話說,我可以獲得Class.SubValue)訪問類的子值。
但是,當我想要使用CallByName獲得Class.SUBCLASS.SubValue時出現錯誤。
是否有可能使用CallByName(或通過使用smtg其他)?使用CallByName訪問子類或子屬性

下面是一個典型的代碼:

Class Class1 
    Public someVariable as Long=123 'now "Class1" has "someVariable" 
End Class 
Class Class2 
    Public subClass as new Class1 'now "Class2" has a SUBCLASS "Class1" 
End Class 

Sub Test() 
    Dim c1 as New Class1, c2 as New Class2 
     'This works fine, and I can get c1.someVariable. It's OK. 
    a=CallByName(c1,"someVariable",CallType.Get) 
     'But I get error here... and I can't get c2.subClass.someVariable 
    b=CallByName(c2,"subClass.someVariable",CallType.Get) 
End Sub 

- 編輯:這是實際的問題。 -

我想從文件加載參數形成的控制,並在文件中的參數是這樣寫的:
<ControlName>.<Property>=<Value> | TextBox1.Text=SomeText | Button2.Left=1234
當我用我得到錯誤:
CallByName(MyForm, "<ControlName>.<Property>", CallType.Set, "<Value>")

如何我可以解決我的問題(使用CallByName或smtg其他)?

+1

什麼是使用這種傳統和訪問成員的陳舊方式的意義呢?只是'c2.subClass.someVariable'不夠? ;) – 2013-03-24 19:36:41

+0

在實例中,檢查這個其他答案:http://stackoverflow.com/questions/1267588/disadvantages-of-callbyname-function-in-vb-net – 2013-03-24 19:37:35

+1

'c2.subClass.someVariable'是不夠的,因爲我需要更改我的表單的控件的**文本**和**大小**。例如,我需要更改'MyForm.TextBox1.Left','MyForm.Button2.Text'和smtg。 – Jet 2013-03-24 19:45:07

回答

2

我用這個簡單的recoursive功能

Function RecursiveGetValue(ByVal Name As String, ByVal Data As Object) As Object 
If Name.Contains(".") = True Then 
    RecursiveGetValue = RecursiveGetValue(Name.Substring(Name.IndexOf(".") + 1), CallByName(Data, Name.Split(".")(0), CallType.Get)) 
Else 
    RecursiveGetValue = CallByName(Data, Name, CallType.Get) 
End If 

端功能

+0

@nurdglaw什麼? – Jet 2013-06-14 11:33:22