You can add a new handler to the events of a button (or other control). It may be desirable to remove the previously added handler(s) at the same time. As you didn't give much detail as to how the skill would be selected, I chose to use radiobuttons (with names starting with rb). When you click one of the radiobuttons, it changes the behaviour of an associated button (I used two).
Public Class Form1
Dim currentClickHandlers As New Dictionary(Of Button, List(Of EventHandler))
Sub SetOnlyClickHandler(target As Button, handler As EventHandler, label As String)
' remove any previously stored click event handlers if they exist
If currentClickHandlers.ContainsKey(target) Then
For Each hndlr In currentClickHandlers(target)
RemoveHandler target.Click, hndlr
Next
currentClickHandlers(target).Add(handler)
Else
Dim evntHandlers = New List(Of EventHandler)
evntHandlers.Add(handler)
currentClickHandlers.Add(target, evntHandlers)
End If
AddHandler target.Click, handler
target.Text = label
End Sub
Sub SetHotButtonAction(target As Button, action As Integer)
' depending on which button is the target, set appropriate actions
Select Case True
Case target.Equals(Button1)
Select Case action
Case 1
target.BackColor = Color.Green
SetOnlyClickHandler(target, AddressOf Heal, "Heal")
Case 2
target.BackColor = Color.Yellow
SetOnlyClickHandler(target, AddressOf Strike, "Strike")
Case 3
target.BackColor = Color.Red
SetOnlyClickHandler(target, AddressOf Finisher, "Finisher")
End Select
Case target.Equals(Button2)
Select Case action
Case 1
target.BackColor = Color.Purple
SetOnlyClickHandler(target, AddressOf RunAway, "Run away")
Case 2
target.BackColor = Color.Pink
SetOnlyClickHandler(target, AddressOf DuckAndCover, "Duck and cover")
End Select
End Select
End Sub
' methods to be used for the actions
Sub Heal(sender As Object, e As EventArgs)
MsgBox("Heal")
End Sub
Sub Strike(sender As Object, e As EventArgs)
MsgBox("Strike")
End Sub
Sub Finisher(sender As Object, e As EventArgs)
MsgBox("Finisher")
End Sub
Sub RunAway(sender As Object, e As EventArgs)
MsgBox("Flee!")
End Sub
Sub DuckAndCover(sender As Object, e As EventArgs)
MsgBox("Duck and cover")
End Sub
' set the actions of the radiobuttons
Private Sub rbHeal_Click(sender As Object, e As EventArgs) Handles rbHeal.Click
SetHotButtonAction(Button1, 1)
End Sub
Private Sub rbStrike_Click(sender As Object, e As EventArgs) Handles rbStrike.Click
SetHotButtonAction(Button1, 2)
End Sub
Private Sub rbFinisher_Click(sender As Object, e As EventArgs) Handles rbFinisher.Click
SetHotButtonAction(Button1, 3)
End Sub
Private Sub rbRunAway_Click(sender As Object, e As EventArgs) Handles rbRunAway.Click
SetHotButtonAction(Button2, 1)
End Sub
Private Sub rbDuckAndCover_Click(sender As Object, e As EventArgs) Handles rbDuckAndCover.Click
SetHotButtonAction(Button2, 2)
End Sub
End Class