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

スクロールの中央の画像をズームしたいのですが、できません。:(この行をコメントアウトしました。そうしないとエラーが発生します(スクロールの画像は充電されません)

Form Shown イベントに配置しましたが、これは機能しません。:P

4

1 に答える 1

0

deel変数のロジックをFor...Nextループの外に移動するとどうなるでしょうか? 変数が何であるかはalturわかりませんが、このロジックをループに入れることで、まだ存在しない PictureBox コントロールを呼び出そうとしている可能性が非常に高いです。Panel1.Scrollまた、おそらくイベントでも同様のロジックが必要になるでしょう。

これは、私が話していることの例をもう少し具体化したものです (いくつかの変数を移動Panel1.Scrollして、新しく作成された PictureBox コントロールでイベントが機能するようにし、deel変数に使用していたロジックを変更して、もちろん、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 に答える