Picturebox不会显示图像

时间:2017-03-23 22:29:22

标签: vb.net winforms

我正在编写一个程序,可以在运行时创建和加载图片框。问题是它们不会显示或显示任何内容。不知道我做错了什么。我已经检查过,图像的完整路径是正确的。

Sub DrawScreen()
    'Call g.DrawImage to draw whatever you want in here
    Dim layers(Me.ListBox1.Items.Count) As PictureBox

    For i = 0 To ListBox1.Items.Count - 1
        'Create New Layer as picturebox
        layers(i) = New PictureBox
        layers(i).Parent = Me.picWatch
        layers(i).BackColor = Color.Transparent
        layers(i).Visible = True

        Select Case ListBox1.Items(i)

            Case "image"
                'Debug.Print(ListofLayers(i).Full_Path)
                layers(i).Image = Image.FromFile(ListofLayers(i).Full_Path)
                layers(i).Top = ListofLayers(i).X
                picWatch.Controls.Add(layers(i))

            Case "shape"
                'Dim g As Graphics
                'g.DrawRectangle()

            Case "text"
                Dim g As Graphics = layers(i).CreateGraphics
                g.DrawString(ListofLayers(i).Text, New Font("Arial", 12), Brushes.White, ListofLayers(i).X, ListofLayers(i).Y)

            Case Else
                Debug.Print(ListBox1.Items(i))

        End Select
    Next
    Me.Refresh()
End Sub

1 个答案:

答案 0 :(得分:2)

您永远不会将图片框添加到表单中。致电Me.Controls.Add()

Me.Controls.Add(layers(i))

正如LarsTech已经指出的那样:

  1. 你似乎有一个错字:

    layers(i).Top = ListofLayers(i).X
    

    X是控件水平位置的坐标,与.Left相同。

    然而,

    Y是控件垂直位置的坐标,与.Top相同。

  2. 使用CreateGraphics是一个坏主意。对于初学者,当重绘控件时,您使用它绘制的内容将被删除。而且由于你没有处理它,你也会有内存泄漏。

    为每个图片框订阅Paint event,然后在那里进行所有绘图。

  3. 最后,请注意一点:VB.NET中的数组声明没有指定数组中有多少项,而是指定数组应该以什么索引结束。由于数组是从零开始的,所以:

    Dim layers(Me.ListBox1.Items.Count) As PictureBox
    

    ......等于这个:

    Dim layers(0 To Me.ListBox1.Items.Count) As PictureBox
    

    因此,数组将包含ListBox1.Items.Count 加一个 ,因为括号内的内容仅指定了下限和/或上限。

    要创建具有“正确”数量项目的数组,您应始终指定 减去 的尺寸:

    Dim layers(Me.ListBox1.Items.Count - 1) As PictureBox