我正在用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'的成员。
谁能帮我解决这个问题?
谢谢!
答案 0 :(得分:1)
您正在访问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
,以防万一。
答案 1 :(得分:1)
您必须cast
control
到picture box
才能获得结果。
试试这个,
CType(Computer_Flow.Controls(i),PictureBox).image=Image.FromFile(Images_Folder_Path & "Back.png")
修改强> 的
你可以像这样轻松地避免使用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