0

嗯,我有一个在 VB.NET 上动态创建的控件的列表,我想给它分配一个值。

        Dim widaco As Integer = 126 'width value

Dim value As String = File.ReadAllText(".\Test.ini")
Dim cuenta As Integer = Find_String_Occurrences(value, "2ç0k") - 1

Dim Array_Size As Integer = cuenta
            ReDim pcb_(Array_Size)

    For pcb_num = 0 To Array_Size
                    Application.DoEvents()
                    'deel = Math.Abs(Int(Panel1.AutoScrollPosition.Y.ToString)) \ altur + 2
                    pcb_(pcb_num) = New PictureBox
                    pcb_(pcb_num).BackColor = Color.FromArgb(255, pcb_num * 3, pcb_num * 2, pcb_num)
                    pcb_(pcb_num).Height = 77
                    pcb_(pcb_num).Width = widaco
                    pcb_(pcb_num).Left = 36
                    pcb_(pcb_num).Top = 85 * pcb_num + 15
                    pcb_(pcb_num).BackgroundImage = Image.FromFile(".\Art\im\" & pcb_num + 1 & ".png")
                    pcb_(pcb_num).Image = Image.FromFile(INI_Manager.Load_Value(".\Test.ini", "FuncImg-" & pcb_num))
                    pcb_(pcb_num).Tag = pcb_num
                    'pcb_(deel).Width = 200
                    Me.Controls.Add(pcb_(pcb_num))
                    pcb_(pcb_num).Parent = Panel1
                    AddHandler pcb_(pcb_num).Click, AddressOf pcb_Click
                Next

好吧,deel 不起作用,我想缩放卷轴的中心图像,但我不能。:(我已经注释掉了这一行,因为如果不这样写,我会导致错误(滚动的图像不收费)

我已将它放在 Form Shown 事件中,但是……这不起作用。:P

4

1 回答 1

0

如果将deel变量的逻辑移到For...Next循环之外怎么办?我不确定altur变量是什么,但很有可能通过在循环中包含此逻辑,您正在尝试调用尚不存在的 PictureBox 控件。此外,您可能需要在Panel1.Scroll事件中使用类似的逻辑。

这是一个我正在谈论的内容更加充实的示例(我移动了一些变量以使Panel1.Scroll事件与新创建的 PictureBox 控件一起工作,并更改了您用于deel变量的逻辑以获取第三个可见的 PictureBox 控件。当然,您可能希望在Panel1.Scroll事件中更改它,具体取决于您实际显示的 PictureBox 控件的数量)。我已经测试了这段代码,它似乎做了我相信你正在寻找的东西:

Public Class Form1
    Private pcb_() As PictureBox
    Private deel As Integer                    'Current PictureBox control zoomed
    Private altur As Integer                   'New PictureBox control to zoom
    Private Array_Size As Integer              'The number of PictureBox controls added to Panel container
    Private Const widaco As Integer = 126      'Default width for non-zoomed PictureBox controls

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim value As String = File.ReadAllText(".\Test.ini")
        Dim cuenta As Integer = Find_String_Occurrences(value, "2ç0k") - 1

        Array_Size = cuenta
        ReDim pcb_(Array_Size)

        For pcb_num = 0 To Array_Size
            Application.DoEvents()
            pcb_(pcb_num) = New PictureBox

            With pcb_(pcb_num)
                .BackColor = Color.FromArgb(255, pcb_num * 3, pcb_num * 2, pcb_num)
                .Height = 77
                .Width = widaco
                .Left = 36
                .Top = 85 * pcb_num + 15
                .BackgroundImage = Image.FromFile(".\Art\im\" & pcb_num + 1 & ".png")
                .Image = Image.FromFile(INI_Manager.Load_Value(".\Test.ini", "FuncImg-" & pcb_num))
                .Tag = pcb_num
                'Added the following line to make sure the image correctly fills the PictureBox control for the "zoom" effect
                .SizeMode = PictureBoxSizeMode.StretchImage
                Me.Controls.Add(pcb_(pcb_num))
                .Parent = Panel1
            End With

            AddHandler pcb_(pcb_num).Click, AddressOf pcb_Click
        Next

        deel = 2
        pcb_(deel).Width = 200
    End Sub

    Private Sub Panel1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles Panel1.Scroll
        For pcb_num = 0 To Array_Size
            'A 0 value for the Top property of each PictureBox control indicates it is at the top of Panel1.
            'As soon as the PictureBox scrolls above the top of Panel1, we want to zoom in on the next PictureBox.
            If pcb_(pcb_num).Top >= 0 Then
                altur = pcb_num + 2
                Exit For
            End If
        Next pcb_num

        pcb_(deel).Width = widaco
        pcb_(altur).width = 200
        deel = altur
    End Sub
End Class
于 2013-07-10T20:17:51.740 回答