有人可以帮我修复此错误吗?
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来解决这个问题,但我真的不想这样做。还有其他方法吗?
答案 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