Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 生成的picturebox的最大值为';不能正确添加_Vb.net - Fatal编程技术网

Vb.net 生成的picturebox的最大值为';不能正确添加

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=

我正在使用以下代码:

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=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个点。但图片框的高度大于此值,这意味着它重叠。