Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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,这是我的函数,它允许我从网页中获取PictureBox的图像链接和标签的标题 Public Shared Function getPics(website As String, pattern As String) Dim tempTitles As New List(Of String)() Dim tempTitles2 As New List(Of String)() Dim lestitres As New List(Of titlesclass) D

这是我的函数,它允许我从网页中获取PictureBox的图像链接和标签的标题

Public Shared Function getPics(website As String, pattern As String)

    Dim tempTitles As New List(Of String)()
    Dim tempTitles2 As New List(Of String)()
    Dim lestitres As New List(Of titlesclass)

    Dim webClient As New WebClient()
    webClient.Headers.Add("user-agent", "null")
    Dim counter As Integer = 0
    Dim counter2 As Integer = 0
    Dim counter3 As Integer = 0
    Dim counter4 As Integer = 1
    Dim counter5 As Integer = 0
    Dim counter6 As Integer = 0
    'If the website happens to go offline, at least your application wont crash.
    Dim content As String = webClient.DownloadString(website)
    Dim query = From title In Regex.Matches(content, pattern).Cast(Of Match)
                Select New With {Key .Link = String.Concat("http://www.gamestop.com", title.Groups("Data").Value),
                         Key .Title = title.Groups("Dataa").Value}
    For Each letitre In query.Distinct
        'MsgBox(letitre.Link & " ======= " & letitre.Title)
    Next
    'For Each title As Match In (New Regex(pattern).Matches(content)) 'Since you are only pulling a few strings, I thought a regex would be better.
    '    Dim letitre As New titlesclass
    '    letitre.Link = title.Groups("Data").Value
    '    letitre.Title = title.Groups("Dataa").Value
    '    lestitres.Add(letitre)
    '    'tempTitles2.Add(title.Groups("Dataa").Value)
    'Next
    Dim titles = tempTitles.Distinct().ToArray() 'remove duplicate titles
    'Dim titles2 = tempTitles2.Distinct().ToArray()
    Dim titles2 = lestitres.Distinct().ToArray()
    lestitres.Clear()

    'For Each title As titlesclass In titles2
    For Each letitre In query.Distinct
        'ListBox.Items.Add(title) 'what you do with the values from here is up to you.
        Dim ImageInBytes() As Byte = webClient.DownloadData(letitre.Link)
        Dim ImageStream As New IO.MemoryStream(ImageInBytes)
        Dim MyPic As New PictureBox
        Dim MyLab As New Label


        If (counter2 > 0 AndAlso ((counter2 Mod 4 = 0) OrElse counter3 = 1)) Then

            counter3 = 1
            counter4 += 1
            If (counter2 Mod 4 = 0) Then
                counter5 = 0
                counter6 += 170
            End If
            MyPic.Location = New Point(counter5, MyPic.Location.Y + counter6)
            MyLab.Location = New Point(counter5, MyPic.Location.Y + counter6)
            If counter4 = 4 Then
                counter3 = 0
            End If


            counter5 += 200
        Else
            MyPic.Location = New Point(counter, MyPic.Location.Y)
            MyLab.Location = New Point(counter, MyPic.Location.Y)
        End If
        counter += 200
        counter2 += 1
        MyPic.SizeMode = PictureBoxSizeMode.AutoSize
        MyLab.Text = letitre.Title
        MyPic.Image = New System.Drawing.Bitmap(ImageStream)
        Form2.Controls.Add(MyPic)
        Form2.Controls.Add(MyLab)

    Next


End Function
名为titleClass的类包含两个元素,我将在其中存储链接和标题:

Public Class titlesclass
Public Property Link As String
Public Property Title As String
End Class
我的小按钮可以完成所有的工作

Dim websiteURL1 As String = "http://www.gamestop.com/collection/upcoming-video-games"
    Class1.getPics(websiteURL1, "<img src=""(?<Data>[^>]*)""><p>(?<Dataa>[^>]*)<br>")

因此,我清理了通过使用
原则和增量生成
PictureBox
位置的方法:

注意:

  • 如果需要在顶部留出空间来添加信息,请将
    行的计数从0改为1
注2

  • 这里的图像尺寸是经过harcoded的,但是您可以使用更流畅的动态尺寸。我只是清理了定位码,没有清理其余的。
用以下函数替换您的函数:

Public Shared Sub getPics(website As String, pattern As String)
    Dim tempTitles As New List(Of String)()
    Dim tempTitles2 As New List(Of String)()
    Dim lestitres As New List(Of titlesclass)
    Dim webClient As New WebClient()
    webClient.Headers.Add("user-agent", "null")
    Dim counter As Integer = 0
    Dim counter2 As Integer = 0
    Dim counter3 As Integer = 0
    Dim counter4 As Integer = 1
    Dim counter5 As Integer = 0
    Dim counter6 As Integer = 0
    'If the website happens to go offline, at least your application wont crash.
    'Handle default proxy
    Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy()
    proxy.Credentials = CredentialCache.DefaultCredentials
    webClient.Proxy = proxy
    Dim content As String = webClient.DownloadString(website)
    Dim query = From title In Regex.Matches(content, pattern).Cast(Of Match)
                Select New With {Key .Link = String.Concat("http://www.gamestop.com", title.Groups("Data").Value),
                         Key .Title = title.Groups("Dataa").Value}

    Dim titles = tempTitles.Distinct().ToArray() 'remove duplicate titles
    Dim titles2 = lestitres.Distinct().ToArray()
    lestitres.Clear()
    'Count Items
    Dim item As Integer = 0
    'Count Row
    Dim row As Integer = 0
    'image: 222*122
    For Each letitre In query.Distinct
        Dim ImageInBytes() As Byte = webClient.DownloadData(letitre.Link)
        Dim ImageStream As New IO.MemoryStream(ImageInBytes)
        Dim MyPic As New PictureBox
        Dim MyLab As New Label
        'x = numéro item fois largeur image
        'y = numéro de ligne fois hauteur image
        MyPic.Location = New Point(item * 222, row * 122)
        MyLab.Location = New Point(item * 222, row * 122)
        MyPic.SizeMode = PictureBoxSizeMode.AutoSize
        MyLab.Text = letitre.Title
        MyPic.Image = New System.Drawing.Bitmap(ImageStream)
        Form1.Controls.Add(MyPic)
        Form1.Controls.Add(MyLab)
        'Bring Labels to front
        For Each ctrl As Control In Form1.Controls
            'If the control is of type label
            If TypeOf ctrl Is Label Then
                'Then bring to front 
                ctrl.BringToFront()
            End If
        Next
        'Increment the item count
        item = item + 1
        'If item is multiple of 4 or could check 4 then
        If item Mod 4 = 0 Then
            'Reset counter
            item = 0
            'Increment Row
            row = row + 1
        End If
    Next
End Sub
返回示例:


为行数创建一个整数,每4的倍数递增一次,然后只需检查行,并将位置Y更改为行数的倍。图片已显示每行4个,标签也,但是标签显示得很远,即使它是相同的图片Y X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
Public Shared Sub getPics(website As String, pattern As String)
    Dim tempTitles As New List(Of String)()
    Dim tempTitles2 As New List(Of String)()
    Dim lestitres As New List(Of titlesclass)
    Dim webClient As New WebClient()
    webClient.Headers.Add("user-agent", "null")
    Dim counter As Integer = 0
    Dim counter2 As Integer = 0
    Dim counter3 As Integer = 0
    Dim counter4 As Integer = 1
    Dim counter5 As Integer = 0
    Dim counter6 As Integer = 0
    'If the website happens to go offline, at least your application wont crash.
    'Handle default proxy
    Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy()
    proxy.Credentials = CredentialCache.DefaultCredentials
    webClient.Proxy = proxy
    Dim content As String = webClient.DownloadString(website)
    Dim query = From title In Regex.Matches(content, pattern).Cast(Of Match)
                Select New With {Key .Link = String.Concat("http://www.gamestop.com", title.Groups("Data").Value),
                         Key .Title = title.Groups("Dataa").Value}

    Dim titles = tempTitles.Distinct().ToArray() 'remove duplicate titles
    Dim titles2 = lestitres.Distinct().ToArray()
    lestitres.Clear()
    'Count Items
    Dim item As Integer = 0
    'Count Row
    Dim row As Integer = 0
    'image: 222*122
    For Each letitre In query.Distinct
        Dim ImageInBytes() As Byte = webClient.DownloadData(letitre.Link)
        Dim ImageStream As New IO.MemoryStream(ImageInBytes)
        Dim MyPic As New PictureBox
        Dim MyLab As New Label
        'x = numéro item fois largeur image
        'y = numéro de ligne fois hauteur image
        MyPic.Location = New Point(item * 222, row * 122)
        MyLab.Location = New Point(item * 222, row * 122)
        MyPic.SizeMode = PictureBoxSizeMode.AutoSize
        MyLab.Text = letitre.Title
        MyPic.Image = New System.Drawing.Bitmap(ImageStream)
        Form1.Controls.Add(MyPic)
        Form1.Controls.Add(MyLab)
        'Bring Labels to front
        For Each ctrl As Control In Form1.Controls
            'If the control is of type label
            If TypeOf ctrl Is Label Then
                'Then bring to front 
                ctrl.BringToFront()
            End If
        Next
        'Increment the item count
        item = item + 1
        'If item is multiple of 4 or could check 4 then
        If item Mod 4 = 0 Then
            'Reset counter
            item = 0
            'Increment Row
            row = row + 1
        End If
    Next
End Sub