2013-06-19 3 views
0

привет, ребята, которые делают это приложение в VB, которое загружает ящики изображений из файла в панель flowlayout и добавляет обработчик кликов на каждый рис, чтобы отображать их в большем размере. однако, когда они нажаты, удаляются из макета панели, и я не хочу этого и не понимаю, почему это происходит. это мой код:pics remove from the flowlayoutpanel

Imports System.IO Public Class 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 

End Class

ответ

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() 
+0

wow Большое спасибо, сэр, я очень ценю ваш ответ :) –