vb.net присвоява изображение към picturebox чрез контролите на панела

Пиша програма за игра на карти във VB.NET. Срещнах проблем. Computer_Flow се декларира като System.Windows.Forms.Panel ръчно в прозореца за проектиране. Създадох програмно поле за картина като това:

Dim P As PictureBox = New PictureBox  
P.Size = New Point(Cards_Width, Cards_Height)  
P.SizeMode = PictureBoxSizeMode.StretchImage  
P.Image = Image.FromFile(Images_Folder_Path & "Back.png")   
P.Tag = Deck(DI)    
P.Margin = New Padding(1)  
Computers_Hand(DI) = Deck(DI)  
Computer_Flow.Controls.Add(P)

По-късно искам да променя това изображение на PictureBox. Опитвам се да го променя така:

Computer_Flow.Controls(i).image = Image.FromFile(Images_Folder_Path & "Back.png")  

Но получавам грешка, която казва: 'image' не е член на System.Windows.Forms.Control'.

Кой може да ми помогне да реша този проблем?

Благодаря!


person eMbs    schedule 31.01.2013    source източник


Отговори (2)


Трябва да cast това control до picture box, за да получите резултата си. Опитайте това,

CType(Computer_Flow.Controls(i),PictureBox).image=Image.FromFile(Images_Folder_Path & "Back.png")

CType

РЕДАКТИРАНЕ:

можете лесно да избегнете това invalidCastException по ефективен начин като този,

If TypeOf Computer_Flow.Controls(i) Is PictureBox then

CType(Computer_Flow.Controls(i),PictureBox).image=Image.FromFile(Images_Folder_Path & "Back.png")

End If

TypeOf

person Rajaprabhu Aravindasamy    schedule 31.01.2013
comment
Да, това работи чудесно, както и други отговори, мисля, че това е дори по-добре, защото не е необходимо да декларирам друга променлива. Благодаря! - person eMbs; 31.01.2013
comment
За протокола избягвате временна променлива, което е добре, но CType ще хвърли InvalidCastException, ако Control, което му давате, не е PictureBox. В този случай бих го увил в блок Try...Catch. - person SolarBear; 31.01.2013
comment
@GriphoN, ако искате да преодолеете изключението, споменато от solarbear, можете да опитате новата ми редакция. - person Rajaprabhu Aravindasamy; 31.01.2013

Имате достъп до списък с Control, основен клас, който не съдържа член Image.

Ще трябва да го преобразувате като PictureBox:

Dim pb As PictureBox = TryCast(Computer_Flow.Controls(i), PictureBox)

If Not pb Is Nothing Then
     pb.image = Image.FromFile(Images_Folder_Path & "Back.png")
End If

По този начин VB ще разбере, че наистина не е просто Control, а PictureBox, с Image член. Предлагам да добавите TryCast, за всеки случай.

person SolarBear    schedule 31.01.2013