拜托,任何人都可以帮我解决这个问题:
我有一个字符串格式的控件名称(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)
答案 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)返回图像..