Jag har skapat en klass som dynamiskt lägger till ett antal kontroller (listbox, combobox) till ett formulär utifrån innehållet i ett dataset. Nu vill jag skapa händelser som triggas när användaren klickar i kontrollen när den ligger i formuläret i run-time. Hur gör jag detta? /Johan Hej! Funkar utmärkt även när jag flyttar allt till min klass. Tack så mycket.Händelse för dynamiskt laddad kontroll
Sv: Händelse för dynamiskt laddad kontroll
Händelser eller events hanterias i .net med hjälp av delegates. För att binda en händelse till en EventHandler gör man följande:
<code>
' Enkelt exempel
Protected myButton As Button
Private Sub _Event_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myButton = New Button()
With myButton
.Location = New System.Drawing.Point(0, 0)
.Text = "Test"
End With
Me.Controls.Add(myButton)
AddHandler myButton.Click, AddressOf Me.WhenClickedDoThisStuff
End Sub
Private Sub WhenClickedDoThisStuff(ByVal sender As Object, ByVal arg As EventArgs)
MsgBox("clicked!")
End Sub
</code>
myButton.Click är egentligen en multicastdelegate på knappklassen som vi sopar in en egen delegate i (genom addressof ladida (skapas implicit)) som pekar på aktuell EventHandler. Detta är exakt samma sak som händer när kontroller statiskt binds mot eventhandlers (med withevents och handles ladida) med skillnaden att vb gör detta bakom kulisserna vid kompilering. I C# finns tex inte denna funktion och bindningen görs som ovan...
/MickeSv: Händelse för dynamiskt laddad kontroll
/Johan