【问题标题】:vb.net assign image to picturebox through panel controlsvb.net 通过面板控件将图像分配给图片框
【发布时间】:2013-01-15 19:07:27
【问题描述】:

我正在用 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 的成员。

谁能帮我解决这个问题?

谢谢!

【问题讨论】:

    标签: vb.net image panel picturebox


    【解决方案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,以防万一。

    【讨论】:

      【解决方案2】:

      您必须将castcontrol 发送到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

      【讨论】:

      • 是的,这和其他答案一样好用,我认为这更好,因为我不需要声明其他变量。谢谢!
      • 为了记录,你确实避免了一个临时变量,这很好,但是如果你给它的 Control 碰巧不是图片框,CType 将抛出一个 InvalidCastException。在这种情况下,我会将其包装在 Try...Catch 块中。
      • @GriphoN 如果你想克服 solarbear 提到的异常,你可以试试我的新编辑。
      猜你喜欢
      • 1970-01-01
      • 2014-06-27
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2013-09-22
      相关资源
      最近更新 更多