我有一個被稱爲 「Cheat_Enabled 」VAR:解析控制名義變量名
Dim Cheat_Enabled As Boolean
而一個被稱爲「 CheckBox_Cheat」 與標籤 「作弊」
複選框現在我想要做一個動態的方法來通過分割(或某種)控件的名稱來改變var的值。
例如,像這樣(代碼obviouslly不工作):
Private Sub CheckBoxes_CheckedChanged(sender As Object, e As EventArgs) Handles _
CheckBox_Cheat.CheckedChanged
Dim SenderVarEquivalent As Object = _
Me.variables.Find(sender.Tag & "_Enabled")(0)
If sender.Checked Then SenderVarEquivalent = True _
Else SenderVarEquivalent = False
End Sub
' Info:
' Sender.Tag = "Cheat"
' Sender.Name = "CheckBox_Cheat"
' VariableName = "Cheat_Enabled"
我認爲這是可以用一個CTYPE或DirectCast或GetObject做,但我不知道究竟該怎麼辦它。
UPDATE:
這是一個類似簡單的代碼,但不是轉換控件名稱到VARIABLENAME它控制標籤轉換爲複選框的控件名稱對象:
Public Class Form1
Dim Cheat_Enabled As Boolean = True
Private Sub CheckBox_Cheat_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox_Cheat.CheckedChanged
CType(Controls("CheckBox" & "_" & sender.tag), CheckBox).Checked = Cheat_Enabled
End Sub
End Class
希望如果我可以像CType一樣控制名稱來捕獲變量名稱並使用它,例如像這樣:
Dim Cheat_Enabled As Boolean
Private Sub CheckBox_Cheat_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox_Cheat.CheckedChanged
' Sender.name is : "CheckBox_Cheat"
' Sender.tag is : "Cheat"
' Variable name is: "Cheat_Enabled"
If sender.checked Then
CType(Variable(sender.tag & "_Enabled"), Boolean) = True
Else
CType(Variable(sender.tag & "_Enabled"), Boolean) = False
End If
End Sub
你能解釋一下爲什麼你需要做到這一點?正如Alex指出的那樣,這是可能的,但這很可能是不必要的。在你的情況下,很有可能有更好的方法來做到這一點。只有在沒有更好的方法可用時才應使用反射。例如,在任何需要知道當前是否啓用的情況下,爲什麼不檢查複選框的值而不是該變量?或者,如果你需要變量,爲什麼不在'CheckedChanged'事件中設置'Cheat_Enabled = CheckBox_Cheat.Checked'? –
因爲我有很多控件,有很多標籤和很多布爾變量,這就是我尋找一種動態的方式來修改checkedchanged事件中的變量而不是像你所做的那樣做的原因說過。感謝評論! – ElektroStudios