从另一个表单将图像分配给图片框
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。
我有一个主窗体上有 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。