Присвойте изображение картинке из другой формы - PullRequest
0 голосов
/ 04 октября 2019

У меня есть программа с 16 пустыми ящиками с картинками на главной форме (MainForm).

Когда пользователь щелкает поле, открывается вторая форма (form2), которая имеет 17 ящиков с рисунками, каждый сконкретное изображение. Я хочу, чтобы конкретное изображение помещалось в поле для картинок, которое было щелкнуто в главной форме.

Я использовал этот код на form2 при нажатии на одну из 17 коробок с картинками

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

ОднакоКогда я нажимаю picturebox2 в главной форме, изображение, выбранное в form2, присваивается Mainform.picturebox1, а не picturebox2.

Мне нужен способ, чтобы код выяснил, какой изКликнули 16 ящиков с картинками в главной форме, а затем добавили выбранное изображение в эту коробку.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Я думаю, что есть два пути. Первый предполагает, что ваша форма2 используется только для выбора фотографии, а затем закрывается, возвращаясь к главной форме.

В этом случае добавьте общедоступное изображение в форму form2 следующим образом:

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

затем в форме2, при выборе изображения установите _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

Другой способ - передать файл Picturebox в Form2 либо как свойство, либо в качестве параметра, а затем установить изображение для этого окна в Form2, но япредпочитаю вариант 1.

0 голосов
/ 04 октября 2019

Вот как я бы решил эту проблему:

  • Создайте свойство в Form2, в котором будет сохранено изображение, по которому щелкнули
  • В событиях кликов PictureBox в Form2 установите свойствок изображению соответствующего PictureBox, установите DialogResult формы в OK, а затем закройте форму.
  • В ваших событиях щелчка 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
...