好吧,我有一个动态创建的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
答案 0 :(得分: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