我有一个如下所述的功能。如果用户在面板上放置一个小图像,我需要添加N个图片框。 使用下面的代码(On Drag and Drop事件的形式),我可以添加一个动态图片框。但我面临两个问题。
它只添加了1个图片框。如果我拖放某些内容,它只会替换Picturebox中的图片。
我需要按行和列添加新的图片框,具体取决于面板的宽度
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
答案 0 :(得分:0)
您需要计算面板中可容纳的图像数量:
numImagesWide = thePanel.ActualWidth / image.Width
numImagesHigh = thePanel.ActualHeight/ image.Height
你可以安全地使用整数运算,因为你只需要适合的整数图像。
然后,您可以循环遍历numImagesWide
和numImagesHigh
每次循环添加新的PictureBox
。当前方法中的所有代码都希望进入循环 - 因此编写一个循环并调用当前方法的包装器方法可能会更清晰。