2013-09-28 58 views
0

即時創建遊戲的用途技能如治療,罷工等我希望他們的玩家能夠將技能分配給熱鍵。但即時尋找一種方式,我可以做一個「變量」按鈕,可以做這樣的事情: 改變一個變量,如「名稱」的價值已經創建的按鈕名稱值。 EX:按鈕變量VB.Net

Dim bla As New Button 
Private Sub btnHot3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHot3.Click 
    bla = New Button 
    bla.Name = "btnHot3" 
    Hotkey(SkillUsed, bla) 
End Sub 
Sub Hotkey(ByVal skillused As Integer, ByVal bla As Button) 
    If SkillSelected = 1 Then 
     btnHot3.Image = My.Resources.Heal 
    ElseIf SkillSelected = 2 Then 
     bla.Image = My.Resources.Strike 
    ElseIf SkillSelected = 3 Then 
     bla.Image = My.Resources.Finisher 
    End If 
End Sub 

回答

0

您可以將新處理程序添加到按鈕(或其他控件)的事件中。可能需要同時刪除先前添加的處理程序。由於您沒有詳細說明如何選擇技能,我選擇使用單選按鈕(名稱以rb開頭)。當您單擊其中一個單選按鈕時,它會更改相關按鈕的行爲(我使用了兩個按鈕)。

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

非常感謝您的時間和精力。即時通訊完全是新的代碼和你在上面的答案中使用的東西,因此不知道如何直接將它應用到我的代碼是如何佈局的,我是否可以粘貼所有與我的技能相關的代碼程序讓你看看?因爲我不太清楚如何管理這一切。 – user2826539

+0

@ user2826539我建議您爲我發佈的代碼創建一個新的Windows Forms項目,以便您可以看到它是如何工作的。您將需要添加名爲rbHeal,rbStrike,rbFinisher,rbRunAway和rbDuckAndCover的五個單選按鈕和兩個按鈕(將其名稱保留爲默認的Button1和Button2)。運行它,看看它的行爲如何 - 是否以某種類似於你想要的方式工作? –

+0

我得到2錯誤爲以下行(錯誤周圍的方形框架): Dim evntHandlers =新的列表(EventHandler)[來自{處理程序}] currentClickHandlers.Add(target,[evntHandlers)] – user2826539