从另一个表单将图像分配给图片框

Assign an image to a picturebox from another form

我有一个主窗体上有 16 个空白图片框的程序 (MainForm)。

当用户单击一个框时,会打开第二个表单 (form2),其中有 17 个图片框,每个图片框都有一个特定的图像。我希望将特定图像放入主窗体上单击的图片框中。

当点击 17 个图片框之一时,我在 form2 上使用了这段代码

With Mainform.picturebox1
    .image = My.Resources._apicture01
     End With

但是,当我在主窗体上单击 picturebox2 时,在 form2 中选择的图片被分配给 Mainform.picturebox1 而不是 picturebox2

我需要一种方法让代码找出主窗体上 16 个图片框中的哪一个被单击,然后让它将所选图像添加到该图片框。

以下是我解决问题的方法:

  • 在 Form2 上创建一个 属性 来存储被点击的图像
  • 在您的 PictureBox 中单击 Form2 上的事件,将 属性 设置为相应 PictureBox 的图像,将窗体的 DialogResult 设置为确定,然后关闭窗体。
  • 在你的 PictureBox 中点击 Form1 的事件,在窗体上调用 ShowDialog,检查 DialogResult 是否正常,如果是则将相应的 PictureBox 的图像设置为第一步中声明的 属性

在 Form2 中,您将添加所有 PictureBox 控件并在设计器中设置它们的图像。 Form2 的代码如下所示:

Public Class Form2
  Public Property SelectedImage As Image

  Private Sub Form2_PictureBoxClicked(ByVal sender As Object, ByVal e As EventArgs) Handles PictureBox1.Click, PictureBox2.Click, PictureBox3.Click, PictureBox4.Click, PictureBox5.Click, PictureBox6.Click, PictureBox7.Click, PictureBox8.Click, PictureBox9.Click, PictureBox10.Click, PictureBox11.Click, PictureBox12.Click, PictureBox13.Click, PictureBox14.Click, PictureBox15.Click, PictureBox16.Click, PictureBox16.Click
    Dim clickedButton As Button = DirectCast(sender, PictureBox)
    With Me
      .SelectedImage = clickedButton.Image
      .DialogResult = DialogResult.Ok
      .Close()
    End With
  End Sub
End Class

然后在您的 Form1 中,您将在设计器中添加所有 PictureBox 控件,Form1 的代码如下所示:

Public Class Form1
  Private Sub Form1_PictureBoxClicked(ByVal sender As Object, ByVal e As EventArgs) Handles PictureBox1.Click, PictureBox2.Click, PictureBox3.Click, PictureBox4.Click, PictureBox5.Click, PictureBox6.Click, PictureBox7.Click, PictureBox8.Click, PictureBox9.Click, PictureBox10.Click, PictureBox11.Click, PictureBox12.Click, PictureBox13.Click, PictureBox14.Click, PictureBox15.Click, PictureBox16.Click
    Dim clickedButton As Button = DirectCast(sender, PictureBox)
    Using frm2 As Form2 = New Form2()
      If frm2.ShowDialog() = DialogResult.Ok Then
        clickedButton.Image = frm2.SelectedImage
      End If
    End Using
  End Sub
End Class

我认为有两种方法。第一个假定您的 form2 仅用于 select 照片,然后关闭,返回主窗体。

在这种情况下,将 public 图片 属性 添加到 form2,如下所示:

Private _selectedImage As Image
Public ReadOnly Property SelectedImage As Image
    Get
        Return _selectedImage
    End Get
End Property

然后在 form2 中,当 selecting 图片时,将 _selectedImage 设置为图片并关闭表单:

Me.DialogResult = DialogResult.OK

返回主窗体,为所有图片框的 Click 事件设置事件处理程序,例如:

AddHandler PictureBox1.Click, AddressOf PictureBox_Click
AddHandler PictureBox2.Click, AddressOf PictureBox_Click

等等。单击事件处理程序应该是这样的:

    Private Sub PictureBox_Click(sender As Object, e As EventArgs) 
      Dim PB As PictureBox = DirectCast(sender, PictureBox)
      Using F As New Form2()
        If F.ShowDialog = DialogResult.OK Then
            PB.Image = F.SelectedImage
        End If
      End Using
    End Sub

另一种方法是将图片框作为 属性 或参数传递给 Form2,然后在 Form2 中为该图片框设置图像,但我更喜欢选项 1。