12

有人可以帮我解决这个错误吗?

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

4 回答 4

15

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

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

于 2012-09-11T18:11:01.933 回答
3

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

于 2012-09-11T18:23:31.773 回答
1

这是一篇旧帖子,但我遇到了“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
于 2020-12-20T22:15:30.020 回答
1

如果您声明AreaCts没有类型,例如:

Dim AreaCts as Array

尝试

Dim AreaCts() as Double

这修复了我的后期绑定错误。

于 2018-06-13T15:50:52.993 回答