Om jag vill ha många textboxar i en array så får jag det inte att fungera med dess events. Hur löser jag det. Vb vill ju inte kompilera följande: Hej, Varför skapa en eventhandler för varje objekt???WithEvent på en array
<code>
Private WithEvents txtTest(2) as System.Windows.Forms.TextBox
</code>Sv: WithEvent på en array
WithEvents stödjer inte arraydeklarationer, men du kan lösa det på andra sätt. T ex så kan du i deklarationen av ett event använda Handles-keywordet på följande sätt :
<code>
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
</code>
Notera listan av event som kopplas till eventhandlern efter Handles-keywordet.
Alternativt kan du koppla på eventhandlers programmatiskt med hjälp av AddHandler :
<code>
Dim i As Integer
Dim txt(10) As System.windows.forms.TextBox
For i = 0 To 10
txt(i) = New System.Windows.Forms.TextBox
AddHandler txt(i).Click, New System.EventHandler(AddressOf Button2_Click)
Next i
</code>
Lycka till...Sv: WithEvent på en array
<code>
Private Buttons(10) As System.Windows.Forms.Button
Private EventHandler As New System.EventHandler(AddressOf Buttons_Click)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
Dim b As System.Windows.Forms.Button
For i = 0 To 10
b = New System.Windows.Forms.Button()
b.Top = i * b.Height
b.Text = "Button " & i
b.Visible = True
Controls.Add(b)
AddHandler b.Click, EventHandler
Buttons(i) = b
Next
End Sub
Private Sub Buttons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim b As System.Windows.Forms.Button = sender
MessageBox.Show(b.Text)
End Sub
Private Sub Form1_Closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Dim i As Integer
Dim b As System.Windows.Forms.Button
For Each b In Buttons
Controls.Remove(b)
RemoveHandler b.Click, EventHandler
b.Dispose()
Buttons(i) = Nothing
i += 1
Next
End Sub
</code>