2013-11-23 20 views
0

请问谁能帮助我解决这个问题: 我有一个字符串格式的控件(str)的名称,我想设置属性(在代码中)使用该字符串名称进行控制。WP使用字符串作为控件的名称

我尝试这样的事情,但它不起作用。其实,我有一个表达方面的问题。当我把它的名字正确的工作,但是当我使用字符串格式的变量它不。

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

你可以预计'字符串'是'图像'。 – OneFineDay

+0

是的,没错,但String可以是图像控件的名称。 – Djura

回答

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可能是您正在搜索的表单的名称。 )

最后,要回答你的问题,你需要控制改变形象,并设置CReturn为新图像,然后使用回ctrl.BackgroundImage(ETC)返回图像..

+0

我觉得像这样的函数应该返回'Nothing',如果没有发现任何东西 - 类似于'TryCast'。 – OneFineDay

+0

谢谢你的回答,但我不认为你理解这个问题。为了简化:我已经在屏幕上显示了一个(很多)控件(图像),我知道它的名字,并且仅仅因为我拥有它很多,想要通过名称来设置代码的属性(每次都与前一个不同)。 – Djura

+0

好吧,我回去看了你在做什么,仍然有点困惑,但我认为你基本上想要在控件或图像本身的某处存储数据(图像的位置)? 另外,上面你说(str,...)不起作用,但是str没有定义! 还是你想用str检索图像? –