2013-11-23 54 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檢索圖像? –