2013-06-10 4 views
-2

Как изменить изображение в виде изображения, когда у меня есть только строка с именем поля изображения. (Это, вероятно, на самом деле не важно, что это окно изображения или что я меняю это изображение)Использование строки в качестве имени объекта

Например:

"picturebox1".image = myimage  'how would I get this to actually set an image for picturebox1? 
+0

Вам нужно будет использовать отражение. –

+3

Как вы пришли к этому вопросу? Я предполагаю, что есть проблема с дизайном где-то еще, что было бы лучше исправлено, чем продолжать этот подход. Почему у вас есть имя переменной в виде строки? – David

+0

Я просто понял, что это дубликат. ответ здесь: [StackOverflow] (http://stackoverflow.com/questions/15076975/how-to-get-control-property-by-string-name?rq=1) Спасибо за супер быстрые ответы –

ответ

4

Я всегда предпочитаю использовать DirectCast вместо CType. Это также безопаснее, потому что он не будет сбой, если он не найдет картинку с указанным именем.

Dim pb As PictureBox = DirectCast(Me.Controls.Find("picturebox1", True).FirstOrDefault(), PictureBox) 
If pb IsNot Nothing Then 
    pb.Image = myimage 
End If 
+2

Мне нравится метод расширения OfType: 'Dim pb = Me.Controls.OfType (Of PictureBox) .FirstOrDefault()' –

+0

Это хорошее предложение. DirectCast выдаст исключение, если оно обнаружит элемент управления этим именем, но отличается от другого. –

0

Попробуйте это ..

Dim pic as PictureBox = CType(Me.Controls("PictureBox1", PictureBox)) 
pic.Image = myimage 
Смежные вопросы