WP使用字符串作为控件名称

时间:2013-11-23 23:00:12

标签: vb.net string controls

拜托,任何人都可以帮我解决这个问题: 我有一个字符串格式的控件名称(str),我想使用该字符串名称设置该控件的属性(在代码中)。

我尝试这样的东西,但它不起作用。实际上,我有表达问题。当我确切地说它的名字时,但是当我在字符串格式中使用变量时它不会。

Dim str as String
str="k3"
Dim g As Image = CType(str, Image)
g.Source = New BitmapImage(New Uri("/APP;component/Icons/hero.png", UriKind.Relative))

这有效:

Dim g As Image = CType(k3, Image)

虽然这不是:

Dim g As Image = CType(str, Image)

1 个答案:

答案 0 :(得分:0)

我想我明白你要做什么,用字符串声明一个对象......

基本上,为了实现这个目的,你需要一个自定义函数来返回你正在寻找的对象类型......

您需要遍历每个控件并检查控件的名称作为比较,例如如果oControl.Name.ToString = sString则返回oControl

实施例

' A function to return a Control by the Control's name...
Public Function GetControlByName(ByVal oForm As Form, ByVal sName As String) As Control

    Dim cReturn As New Control
    Dim ctrl As Control

    For Each ctrl In oForm.Controls
        cReturn = ctrl
        If ctrl.Name.ToString = sName Then
            Return ctrl ' this is what we want!
        End If

    Next

    Return cReturn
End Function



' Example Usage

Dim oButton As Button = GetControlByName(Me, "Button44")

If oButton.Name.ToString = "Button44" Then

  MessageBox.Show("I have found your Button!")

Else

  MessageBox.Show("Your button was NOT Found!")

End If

显然这个函数有错误的余地,因为如果找不到sName,那么它将返回找到的最后一个ctrl,因此,你需要确保找到你所寻求的控件,通过If语句确定在上面的例子中提供......

此外,它可能不会循环通过容器,菜单等内部的控件,但我不确定,所以你需要检查以确保它没有这个问题......

(语句中的Me很可能会经常使用,但如果您在使用该功能搜索表单的表单之外运行代码,则Me可能是您正在搜索的表单的名称。 )

最后,要回答您的问题,您需要将Control更改为Image,并将CReturn设置为新图像,然后使用Return ctrl.BackgroundImage(etc)返回图像..