VB.NET运算符=未定义

时间:2014-02-09 07:53:57

标签: vb.net casting

我有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

4 个答案:

答案 0 :(得分:1)

=用于值相等。参照等式由Is运算符确定:Dim bSwitchChecked As Boolean = (sender Is Me.optSwitch_1)

顺便说一下,你应该打开Option Strict On,因为你不应该做这样的事情:If sender.Checked Thensender是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)

我认为您希望将senderoptSwitch_1的值设为boolean

只需使用.CheckedoptSwitch_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)