0

我正在用 VB 编写一个小程序,但我被困在我想在按钮单击图片框时添加特定图像的地方。对我来说棘手的部分是,每次单击按钮时,我都希望图像(来自同一位置,例如“C:\Test.jpg”)出现在下一个图片框中。

我试图在图片框名称中使用一个变量,并在每次点击时增加它,但它一直出错(显然一定是用错了)。

所以为了更清楚:

我点击 Button1

来自位置“C:\Test.jpg”的图像出现在 PictureBox1 中

我再次单击 Button1

来自位置“C:\Test.jpg”的图像出现在 PictureBox2 等中。

如您所想,我不是 VB.NET 方面的专家,所以如果各位好心人有任何建议,请提前感谢您 :D

瓦胡尔

4

4 回答 4

0

表格级别:

Private mPList As New List(of PictureBox)
Private pIndex as Integer = 0

显示形式:

With mPlist
   .Add(PictureBox1)
   .Add(PictureBox2)
   ... continue as needed
Ens With

按钮点击

 ' remove image from last picbox (????)
 mPlist(pIndex).Image = Nothing
 pIndex += 1
 if pIndex > mPlist.Count-1 then pIndex = 0
 mPlist(pIndex).Image.FromFile(filename)
于 2013-10-18T13:35:24.093 回答
0

有多种方法可以做到这一点。假设您的变量称为 Counter,并且(假设)您的图片框的父级是主窗体/控件,请将其添加到您的按钮单击事件中:

    Counter += 1

    Dim Pic As PictureBox = CType(Me.Controls("PictureBox" & Counter.ToString), PictureBox)

    If Pic Is Nothing Then
        MsgBox("Could not find PictureBox")
    Else
        Pic.Image = Image.FromFile("C:\Test.jpg")
    End If
于 2013-10-18T14:46:26.117 回答
0

这是使用 Controls.Find() 的另一种方法:

Public Class Form1

    Private counter As Integer = 0

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        counter = counter + 1
        Dim matches() As Control = Me.Controls.Find("PictureBox" & counter, True)
        If matches.Length > 0 AndAlso TypeOf matches(0) Is PictureBox Then
            Dim pb As PictureBox = DirectCast(matches(0), PictureBox)
            Using fs As New System.IO.FileStream("C:\Test.jpg", IO.FileMode.Open)
                pb.Image = New Bitmap(Image.FromStream(fs))
            End Using
        End If
    End Sub

End Class
于 2013-10-18T14:38:07.873 回答
0

我敢肯定,问题在于您正试图弄清楚如何增加数字并获取图片框的句柄来设置图片。我将在这里做几个假设,因为你正在制作一款纸牌游戏,并且你将拥有一定数量的玩家。你有几个选择:

对于数字,您可以在表单中设置 PRIVATE 变量以保存下一个数字,并在每次单击按钮时将其递增 1。

Private Player1NextImage as byte = 1
Private Player2NextImage as byte = 1
Private Player3NextImage as byte = 1
Private Player4NextImage as byte = 1

在按钮单击中,对于特定玩家,您可能希望获得他们的下一个图片框:

您可以将图片框列表保留在列表中,如@Plutonix 所示,或者您可以只使用 SELECT CASE 语句并对图片框进行硬编码。

Select Case Player1NextImage
  Case 1
    Player1Card1PictureBox.Image = ...
  Case 2
    Player1Card2PictureBox.Image = ...
Etc...
'Then increment the number
Player1NextImage += 1
于 2013-10-18T14:38:18.013 回答