如何在拖放事件中将图片添加到动态创建的Picturebox

时间:2014-11-01 15:30:23

标签: vb.net winforms

我有一个如下所述的功能。如果用户在面板上放置一个小图像,我需要添加N个图片框。 使用下面的代码(On Drag and Drop事件的形式),我可以添加一个动态图片框。但我面临两个问题。

  1. 它只添加了1个图片框。如果我拖放某些内容,它只会替换Picturebox中的图片。

  2. 我需要按行和列添加新的图片框,具体取决于面板的宽度


  3. Public Function addPic(ByVal pic As Image, ByVal pName As String)
        Dim PB As New PictureBox
        With PB
            .Name = pName
            .SizeMode = PictureBoxSizeMode.CenterImage
            .Location = New System.Drawing.Point(5, 5)
            .Size = New Size(50, 50)
            .BackgroundImageLayout = ImageLayout.Center
            .Image = pic
            '  Note you can set more of the PicBox's Properties here
        End With
    
        thePanel.Controls.Add(PB)
        RichTextBox1.Controls.Add(PB)
        '  This is the line that sometimes catches people out!
    
        'Me.Controls.Add(PB)
        PB.BringToFront()
    
        '  Wire this control up to an appropriate event handler
        ' AddHandler PB.Click, AddressOf MyPicClicked
    
        AddHandler PB.MouseDown, AddressOf PictureBox_MouseHover
        AddHandler PB.MouseLeave, AddressOf PictureBox_MouseLeave
        ' AddHandler PB.Paint, AddressOf PictureBox_Paint
        Return True
    End Function
    

1 个答案:

答案 0 :(得分:0)

您需要计算面板中可容纳的图像数量:

numImagesWide = thePanel.ActualWidth / image.Width
numImagesHigh = thePanel.ActualHeight/ image.Height

你可以安全地使用整数运算,因为你只需要适合的整数图像。

然后,您可以循环遍历numImagesWidenumImagesHigh每次循环添加新的PictureBox。当前方法中的所有代码都希望进入循环 - 因此编写一个循环并调用当前方法的包装器方法可能会更清晰。