2013-11-23 2 views
0

Возможно, кто-нибудь может мне помочь в решении этой проблемы: У меня есть имя (и) элементов управления в формате строки (str), и я хочу установить свойство (в коде) который управляет использованием этого имени-строки.WP use string as name of control

Я пробую что-то вроде этого, но он не работает. На самом деле, у меня проблема с выражением. Когда я помещаю точно имя, оно работает, но когда я использую переменную в строчном формате, это не так.

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

вы можете Не ожидайте, что 'String' будет' Image'. – OneFineDay

+0

Да, это правильно, но String может быть именем управления изображением. – Djura

ответ

0

Я думаю, я понимаю, что вы пытаетесь сделать, чтобы объявить объект строкой ...

Для этого вам потребуется специальная функция, которая возвращает тип объекта, который вы ищете ...

Вам нужно будет пройти через каждый элемент управления и проверить имя элемента управления в качестве сравнения, например. Если oControl.Name.ToString = sString затем Return 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 

Очевидно, есть место для ошибки с помощью этой функции, потому что если зЫат не найден, то он возвращает последний найденный Ctrl, поэтому , вам необходимо убедиться, что найденный вами контроль действительно найден с помощью инструкции If, как указано в примере выше ...

Кроме того, он может не проходить через элементы управления внутри контейнеров, меню и т. д., но я «Не уверен в этом, поэтому вам нужно будет проверить, чтобы у него не было этой проблемы ...

(В тексте, скорее всего, будет использоваться Me, но я могу назвать имя формы, которую вы ищете, если вы используете код вне формы, которую вы ищете в форме с помощью функции.)

НАКОНЕЦ, чтобы ответить на ваш вопрос, вам нужно будет изменить управление изображения и набор CReturn как новое изображение, а затем использовать Return ctrl.BackgroundImage (и т.д.), чтобы вернуть изображение ..

+0

Я думаю, что такие функции должны возвращать 'Nothing', если ничего не найдено - похоже на' TryCast'. – OneFineDay

+0

Спасибо за ответ, но я не думаю, что вы понимаете вопрос. Чтобы упростить: у меня уже есть (много) элементов управления (изображения) на экране, я знаю его имена и только потому, что у меня его много, нужно установить свойство из кода по его имени (которое каждый раз отличается от предыдущего). – Djura

+0

ОК, я вернулся и прочитал, что вы делаете, все еще немного смущенный, но я думаю, что, по сути, вы хотите хранить данные (местоположение изображения) где-то в элементе управления или самом изображении? Кроме того, выше вы сказали (str, ...) не сработает, но str не определено !!! Или вы хотите получить изображение с помощью str? –