首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CallByName访问子类或子属性

使用CallByName访问子类或子属性
EN

Stack Overflow用户
提问于 2013-03-24 19:33:47
回答 2查看 1.2K关注 0票数 2

我可以使用CallByName访问类的子值(换句话说,我可以使用它获得Class.SubValue )。

但是,当我想使用Class.SUBCLASS.SubValue获得CallByName时,我会出错。

是否可以使用CallByName (或者使用smtg )来完成它?

下面是一个典型的代码:

代码语言:javascript
复制
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 )?

EN

回答 2

Stack Overflow用户

发布于 2013-06-13 12:56:34

我使用了这个简单的回溯函数

代码语言:javascript
复制
  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

端函数

票数 2
EN

Stack Overflow用户

发布于 2019-07-26 17:18:51

我也在做类似的事。我希望能够在SQL列名中使用点表示法来递归填充对象层次结构。

代码语言:javascript
复制
Sub PopulateData(r As SqlDataReader)
    For i As Integer = 0 To r.FieldCount - 1
        If Len(r(i)) > 0 Then
            Try
                Dim ob As Object = Me
                Dim name As String = r.GetName(i)

                While InStr(name, ".") > 0
                    ob = CallByName(ob, Split(name, ".")(0), CallType.Get)
                    name = name.Substring(InStr(name, "."))
                End While

                CallByName(ob, name, CallType.Set, r(i))


            Catch ex As Exception
                Console.WriteLine("Missing property: {0}", r.GetName(i))

            End Try

        End If

    Next

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15602984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档