Option Strict On禁止后期绑定

时间:2012-09-11 18:05:22

标签: vb.net visual-studio-2010 strcmp

有人可以帮我修复此错误吗?

  

Option Strict On禁止后期绑定

以下是导致错误的代码:

Dim SF6StdData As BindingSource = New BindingSource() 
' ...
If StrComp(SF6StdData.Current("O2AreaCts").ToString, "") = 0 Then
    AreaCts(3) = 0
Else
    AreaCts(3) = Convert.ToDouble(SF6StdData.Current("O2AreaCts").ToString)
End If

我需要重写代码,这样就不会有任何错误。我知道我可以通过在项目属性中将Option Strict设置为Off来解决这个问题,但我真的不想这样做。还有其他方法吗?

4 个答案:

答案 0 :(得分:11)

启用Option Strict时不允许延迟绑定。如果您需要执行后期绑定,则唯一的选择是使用反射或关闭Option Strict。但是,一个优点是,您不必为整个项目关闭Option Strict。您可以将其保留为项目,然后只需在您需要执行后期绑定的任何代码文件的顶部添加行Option Strict Off。这不是一个好的解决方案,但它比影响整个项目更好。

此外,由于放置在文件顶部的Option Strict仅适用于该文件,因此它甚至不必应用于整个类。如果您将类拆分为多个Partial Class文件,则可以为每个文件设置不同的Option Strict。例如,如果您将大部分课程放在包含Options Strict On的文件中,然后只需将Partial Class中的一个方法放在一个带有Option Strict Off的单独文件中,那么只有一个方法会松散地编译。该类的其余部分将使用严格的规则进行编译。

答案 1 :(得分:3)

您需要使BindingSource充当强类型数据源。请参阅文档中的备注:http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

答案 2 :(得分:1)

如果你宣布AreaCts没有类型,ex:

Dim AreaCts as Array

尝试

Dim AreaCts() as Double

这解决了我迟到的绑定错误。

答案 3 :(得分:0)

这是一篇旧帖子,但我为“Option Strict On 不允许后期绑定”错误而苦苦挣扎。也许另一个答案会帮助别人。当您尝试将 SF6StdData 绑定源中的数据转换为字符串时,可能会出现问题。你可以通过定义一个所需类型的局部变量,然后使用 Ctype 将数据提取到正确的类型来解决问题。这是我如何解决类似问题的示例。

这段代码给了我后期绑定错误:

    Friend Function CountNumCheckedInGroupbox(ByVal gbox As GroupBox, ByRef nameschecked() As String) As Integer
        Dim numchecked As Integer = 0
        For Each ctrl In gbox.Controls
            If TypeOf ctrl Is CheckBox Then                
                If ctrl.Checked = True Then
                    nameschecked(numchecked) = ctrl.Text
                    numchecked += 1
                End If
            End If
        Next
        Return numchecked
    End Function

在我引用“ctrl.Checked”和“ctrl.Text”的地方发生了后期绑定错误

我没有直接引用“ctrl”,而是定义了一个类型为 Checkbox 的变量 cbox。然后我将“ctrl”中的信息提取到cbox中。现在代码没有显示后期绑定错误:

    Friend Function CountNumCheckedInGroupbox(ByVal gbox As GroupBox, ByRef nameschecked() As String) As Integer
        Dim numchecked As Integer = 0
        Dim cbox As CheckBox
        For Each ctrl In gbox.Controls
        If TypeOf ctrl Is CheckBox Then
                cbox = CType(ctrl, CheckBox)
                If cbox.Checked = True Then
                    nameschecked(numchecked) = cbox.Text
                    numchecked += 1
                End If
            End If
        Next
        Return numchecked
    End Function