我有2个单选按钮,我无法检查哪个被叫:
我得到的错误是“运营商=类型为RadioButton,类型为RadioButton未定义”。
这是引发错误的子句:
Private Sub optSwitch_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles optSwitch_1.CheckedChanged, optSwitch_0.CheckedChanged
If sender.Checked Then
If isInitializingComponent Then
Exit Sub
End If
Dim bSwitchChecked As Boolean = sender = Me.optSwitch_1 'here the error is raised
Me.btnSwitchConfig.Enabled = bSwitchChecked
End If
End Sub
答案 0 :(得分:1)
=用于值相等。参照等式由Is运算符确定:Dim bSwitchChecked As Boolean = (sender Is Me.optSwitch_1)
顺便说一下,你应该打开Option Strict On,因为你不应该做这样的事情:If sender.Checked Then
。 sender
是Object类型,Object类没有Checked属性。您依赖于后期绑定,除非必要,否则不应该这样做。如果要访问该类型的成员,则应该将sender
转换为RadioButton类型,Option Strict On将强制执行该操作。
答案 1 :(得分:0)
您应该从项目设置中选择strict strict以避免运行时转换问题。 导致问题的那条线没有任何意义。
也许这段代码可以帮到你:
If CType(sender, RadioButton).Name.Equals(Me.optSwitch_1).Name AndAlso Not isInitializingComponent Then
Me.btnSwitchConfig.Enabled = sender.Checked
Else
' Add else because otherwise enabled state will always stay true.
Me.btnSwitchConfig.Enabled = False
End If
答案 2 :(得分:0)
我认为您希望将sender
和optSwitch_1
的值设为boolean
,
只需使用.Checked
和optSwitch_1
的属性sender
即可获取该值并避免该错误。
Private Sub optSwitch_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
If sender.Checked Then
Dim bSwitchChecked As Boolean =
sender.Checked = Me.optSwitch_1.Checked 'here the error is raised
End If
End Sub
答案 3 :(得分:0)
如果您想要比较2个对象引用相等性(以检查sender
是否引用与Me.optSwitch_1
相同的实例),请尝试使用.Equals()方法:
Dim bSwitchChecked As Boolean = sender.Equals(Me.optSwitch_1)