参考Label1.Text作为对象

时间:2010-11-09 09:06:14

标签: vb.net

如果我通过函数传递Label1.Text,它会将其视为对象而不是字符串。哪个好。

但是当我做的事情如下:

Dim temp As Object = Label1.Text

然后将它传递给一个函数,它将它视为一个字符串,这是预期的。我怎么能这样做,所以我可以将Label1.Text设置为一个对象,就像我通过函数传递它一样。

编辑:这是我想要做的事情

Public Sub test()
    setIt(Label1.Text, "Test") 'this works

    Dim temp As Object = Label1.Text
    setIt(temp, "Test") 'this doesnt work
End Sub
Public Sub setIt(ByRef e, ByVal v)
    e = v
End Sub

2 个答案:

答案 0 :(得分:4)

字符串是一个字符串,无论您是否将其向下转换为对象。您可以使用typeof temp is Stringtypeof-keyword)进行检查。

我不明白你的实际问题在哪里。

您无法使用给定对象设置Label的Text属性,因为Label.Text必须是Type String。但是您可以使用Object的ToString来获取对象的String represantation,或者如果您知道(使用typeof检查)您的Object是String类型,则可以简单地将其转换回来:

Label1.Text = DirectCast(temp , String)

修改 根据您的更新,我强烈recommend设置Option Strict! 为什么不简单地将值赋给Text属性?

Label1.Text = "Test"

你是ByRef方法非常容易出错并且不易阅读。 如果你真的需要这样的东西,并且你只想设置不同控件的Text属性,那么试试这个:

Public Sub setControlText(ByVal ctrl As Control, ByVal text String)
   ctrl.Text = text
End Sub

或者如果您的“text”必须是Object类型:

Public Sub setControlText(ByVal ctrl As Control, ByVal value As Object)
       If Not value Is Nothing Then ctrl.Text = value.ToString
End Sub

或者您可以使用反射来设置每个属性,但这不应该是标准的

Public Sub setProperty(ByVal obj As Object, ByVal propName As String, ByVal newValue As Object)
    Dim prop As Reflection.PropertyInfo = obj.GetType().GetProperty(propName)
    If Not prop Is Nothing AndAlso prop.CanWrite Then
        prop.SetValue(obj, newValue, Nothing)
    End If
End Sub

您可以通过以下方式调用此函数(请考虑属性名称区分大小写):

setProperty(Label1, "Text", "Hello World!")

答案 1 :(得分:1)

虽然您可以使用此转换和包装:

Dim objTemp As Object = CObj(Label1.Text)

Dim objTemp As Object = CType(Label1.Text, Object)

然后当你需要它时,只需用相反的

打开它
Dim strTemp As String = CType(objTemp, String)

编辑:

如果您使用此wee函数并使用属性的字符串声明调用它,则可以动态编辑对象属性。

 Public Shared Sub SetPropertyValue(ByVal o As Object, _
                     ByVal propertyName As String, ByVal newValue As Object)
        Dim pi As Reflection.PropertyInfo
        pi = o.[GetType]().GetProperty(propertyName)
        If pi Is Nothing Then
            Throw New Exception("No Property [" & propertyName & "] in Object [" & o.[GetType]().ToString() & "]")
        End If
        If Not pi.CanWrite Then
            Throw New Exception("Property [" & propertyName & "] in Object [" & o.[GetType]().ToString() & "] does not allow writes")
        End If
        pi.SetValue(o, newValue, Nothing)
    End Sub

呼叫:

SetPropertyValue(objTemp, "Phone", newVal)

或在Label1的情况下:

Dim newVal as String = "Test"
SetPropertyValue(Label1, "Text", newVal)

希望有所帮助。