Ich versuche, Bildboxen dynamisch in vb.net hinzuzufügen.Event-zu-Bild-Box dynamisch hinzufügen vb.net
Wenn ich mit den Vars spiele und den Wert "i" ändere, kann ich die Bilder und das Event zur letzten PictureBox hinzufügen (ich kann nur auf die letzten Bilder klicken).
Aber wenn ich den Code unten verwende, sagt es, dass es etwas außerhalb der Grenzen (Index außerhalb der Grenzen der Matrix) gibt.
Was mache ich falsch? EDIT tks
Imports System.IO
Public Class FormMain
Dim Path1 As String = Path.GetDirectoryName(Application.ExecutablePath) & "\Source\Images\1.png"
Dim Path2 As String = Path.GetDirectoryName(Application.ExecutablePath) & "\Source\Images\2.png"
Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CreateImages()
End Sub
Dim i As Integer
Dim Logo(i) As PictureBox
Sub CreateImages()
Dim i As Integer = TextBoxNumberImages.Text
For i = 0 To i - 1
Logo(i) = New PictureBox
Logo(i).Name = "Image" + Str(i)
Panel1.Controls.Add(Logo(i))
Logo(i).Image = Image.FromFile(Path1)
Logo(i).SizeMode = PictureBoxSizeMode.StretchImage
AddHandler Logo(i).Click, AddressOf _Click
Next
End Sub
'------ADD EVENT----
Dim IsImageSelected(i) As Boolean
Private Sub _Click(ByVal sender As Object, ByVal e As EventArgs)
If IsImageSelected(i) = False Then
Logo(i).Image = Image.FromFile(Path2)
IsImageSelected(i) = True
Else
Logo(i).Image = Image.FromFile(Path1)
IsImageSelected(i) = False
End If
End Sub
---- ----
Ich habe gerade die var Erklärung innerhalb der Funktion:
Sub CreateImages()
Dim i As Integer = TextBoxNumberImages.Text
Dim Logo(i) As PictureBox
For i = 0 To i - 1
Logo(i) = New PictureBox
Logo(i).Name = "Image" + Str(i)
Panel1.Controls.Add(Logo(i))
Logo(i).Image = Image.FromFile(Path1)
Logo(i).SizeMode = PictureBoxSizeMode.StretchImage
AddHandler Logo(i).Click, AddressOf _Click
Next
End Sub
Nun schafft es die Bilder so, wie ich will, aber ich kann nicht auf die Picture Boxes im Ereignis zugreifen. Hilfe?
Zuerst Option Strict einschalten. dann lesen Sie [Scope in VB] (http://stackoverflow.com/a/33249045/1070452). DIM erstellt jedes Mal ein neues, anderes Logo-Array, also haben Sie wirklich 2-3 davon. Da Sie nicht wissen, wie viele es bis zur Laufzeit gibt, verwenden Sie eine Liste und nicht ein Array – Plutonix
@Plutonix ja ich erkannte, dass jetzt. Danke, die obige Antwort ist perfekt. Ty –
Nein. "Perfect" würde Option Strict implementieren – Plutonix