2013-06-27 75 views
0

嗯,我有一個在VB.NET上動態創建控件的列表,我想給它賦值。爲在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

Pleade提供錯誤消息。 – Micha

+0

沒有例外,只有滾動中的圖像不會像前面說的那樣收費 – Seazoux

回答

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 
+0

另一件需要注意的事情...如果您想要執行「縮放」,您可能還想要更改Height當你改變寬度的時候,'pcb_(deel)'和'pcb_(altur)'對象。只是一個想法... :) –