2

我正在用 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")  

但我收到一条错误消息:“图像”不是 System.Windows.Forms.Control 的成员。

谁能帮我解决这个问题?

谢谢!

4

2 回答 2

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 就会知道它真的不仅仅是 aControl而是一个PictureBox, 和一个Image成员。我建议添加TryCast,以防万一。

于 2013-01-31T16:15:10.110 回答
1

你必须cast这样controlpicture 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

类型

于 2013-01-31T16:32:40.097 回答