Фотографии удаляются из Flowlayoutpanel
Привет, ребята, я делаю это приложение на VB, которое загружает графические блоки из файла в потоковую панель и добавляет обработчик щелчков к каждой картинке, чтобы отобразить их в большем размере. однако, когда они нажаты, они удаляются из компоновочной панели, и я не хочу этого и не понимаю, почему это происходит. это мой код:
Импортирует открытый класс System.IO Form1
Private folderPath As String
Private pics() As PictureBox
Private Sub OpenToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles OpenToolStripMenuItem.Click
FolderBrowser.SelectedPath = Directory.GetCurrentDirectory
If FolderBrowser.ShowDialog() = DialogResult.Cancel Then
Return
End If
folderPath = FolderBrowser.SelectedPath()
Dim fileNames As String() = Directory.GetFiles(folderPath)
If fileNames.Length = 0 Then
MessageBox.Show("Unable to find any image files")
Return
End If
Me.Text = folderPath
ReDim pics(fileNames.Length - 1)
For i As Integer = 0 To fileNames.Length - 1
pics(i) = New PictureBox()
With pics(i)
.Size = New System.Drawing.Size(300, 200)
.SizeMode = PictureBoxSizeMode.Zoom
.Image = New Bitmap(fileNames(i))
FlowPanel.Controls.Add(pics(i))
AddHandler pics(i).Click, AddressOf pics_Click
End With
Next
End Sub
Private Sub pics_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim pic As PictureBox = DirectCast(sender, PictureBox)
With pic
.Size = New System.Drawing.Size(500, 500)
.SizeMode = PictureBoxSizeMode.Zoom
RemoveHandler pic.Click, AddressOf pics_Click
End With
Dim frm As New Form2
FlowPanel.Controls.Add(pic)
frm.FlowLayoutPanel1.Controls.Add(pic)
frm.ShowDialog()
End Sub
Конечный класс
1 ответ
Решение
frm.FlowLayoutPanel1.Controls.Add(pic)
Элемент управления может иметь только одного родителя. Поэтому перемещение его в новую форму удалит его из FlowPanel. Если вам нужна копия, вам нужно создать новый PictureBox:
Dim pic As PictureBox = DirectCast(sender, PictureBox)
Dim newpic As PictureBox = new PictureBox()
With newpic
.Size = New System.Drawing.Size(500, 500)
.SizeMode = PictureBoxSizeMode.Zoom
.Image = pic.Image
End With
Dim frm As New Form2
frm.FlowLayoutPanel1.Controls.Add(newpic)
frm.ShowDialog()