Vb.net 生成的picturebox的最大值为';不能正确添加
我正在使用以下代码: discord.Guilds中每个srvr的Vb.net 生成的picturebox的最大值为';不能正确添加,vb.net,Vb.net,我正在使用以下代码: discord.Guilds中每个srvr的 将顶部调暗为整数=30 Dim pb作为新的PictureBox pb.宽度=70 pb.高度=70 pb.左=10 pb.Top=Top 顶部=+30 pb.Cursor=Cursors.Hand Dim ttImage As Bitmap=Bitmap.FromStream(新内存流(tClient.DownloadData(srvr.IconUrl))) pb.BackgroundImage=ttImage pb.Tag=
将顶部调暗为整数=30
Dim pb作为新的PictureBox
pb.宽度=70
pb.高度=70
pb.左=10
pb.Top=Top
顶部=+30
pb.Cursor=Cursors.Hand
Dim ttImage As Bitmap=Bitmap.FromStream(新内存流(tClient.DownloadData(srvr.IconUrl)))
pb.BackgroundImage=ttImage
pb.Tag=srvr.Id.ToString+“|”+srvr.Name
pb.BackgroundImageLayout=ImageLayout.Zoom
Me.Controls.Add(pb)
pb.BringToFront()
下一个
问题是,我不知道为什么top值不将PictureBoxs放低。我也试过做
top+=30
,根本不工作。我如何才能做到这一点?我建议使用FlowLayoutPanel。
在窗体上创建面板,并将其大小调整为要显示图标的区域。然后,如果要向其中添加picturebox,请执行以下操作:
Dim pb As New PictureBox
pb.Width = 70
pb.Height = 70
Dim ttImage As Bitmap = Bitmap.FromStream(New
MemoryStream(tClient.DownloadData(srvr.IconUrl)))
pb.BackgroundImage = ttImage
pb.Tag = srvr.Id.ToString + " | " + srvr.Name
pb.BackgroundImageLayout = ImageLayout.Zoom
FlowLayoutPanel1.Controls.Add(pb)
请注意,您不需要指定位置。这是因为FlowLayoutPanel会自动计算控件应放置的位置
但是,如果您想坚持使用当前的方法,我注意到的问题是,Top变量是在for循环中声明的。这意味着它所做的每一个循环,旧的变量都会超出范围,并声明一个新的变量。简言之,由于变量是在for循环内声明的,所以对它所做的任何操作都不会传递到循环外,或者在循环的下一次迭代中,因为它是一个不同的变量
此外,正确的语法是
Top += 30
这将解决您的问题:
Dim TopSpacer As Integer = 30
For Each serval In Discord.Guilds
Dim PBico As New PictureBox With {.Size = New Size(70, 70),
.Location = New Point(10, TopSpacer)}
Dim WebClient As New WebClient
Dim ImageBytes() As Byte = WebClient.DownloadData(serval.IconUrl)
Dim IMG As Image = Image.FromStream(New IO.MemoryStream(ImageBytes))
PBico.Image = IMG
Me.Controls.Add(PBico)
TopSpacer = TopSpacer + 100
Next
在上面的代码中,“Top”变量对于每个循环都是相同的变量,因为它不在循环的内部范围内。
Top=+30
是Top+=30
@HansPassant的一个拼写错误。好的,已经清除了,我现在知道该使用哪个了。正如我在上面的帖子中所说的,我已经完成了这两项工作并进行了检查,我得到了与我描述的相同的问题……并且可能将Dim top作为Integer=30移动到循环之外。或者,最好使用FlowLayoutPanel来布局控件。可能,下载一次图像(因为它看起来总是一样的。)@Jimi我也在循环之外尝试过,结果相同。关于FlowLayoutPanel,我不知道它是如何工作的。@Jimi我已将控件添加到FlowLayoutPanel,并将流动方向设置为自上而下,我已尝试使用和不使用位置设置,结果相同,但没有任何更改。它们仍然互相堆叠我已经尝试了第二个例子,并且正确地使用了所有东西。“Top”并没有增加30。我还尝试了FlowLayoutPanel方法,它们仍然堆叠在一起。编辑:这是一个discord.net问题,我已经解决了。我将重新编写最后一个示例,看看是否有任何区别。我注意到另一个问题。您只向y位置添加了30个点。但图片框的高度大于此值,这意味着它重叠。