我正在尝试使用消息框,并尝试了一个简单的是/否消息框 所以我写了这段简单的代码。然而," chc"变量总是返回1,无论我按什么按钮。我提供了代码,所以你可能会看到我做错了什么。这可能是非常错误的。
If MsgBoxResult.Yes Then
chc = 1
ElseIf MsgBoxResult.No Then
chc = 0
End If
MsgBox(chc)
答案 0 :(得分:5)
MsgBox()
方法返回MsgboxResult
Enumeration,检查方法返回的值:
Public Sub MsgBoxExample()
Dim result As MsgBoxResult = Nothing
Dim chc As Integer
result = MsgBox("click something...", vbYesNo, "example")
If result = MsgBoxResult.Yes Then
chc = 1
ElseIf result = MsgBoxResult.No Then
chc = 0
End If
MsgBox(chc)
End Sub
答案 1 :(得分:1)
启用严格编译。
Option Strict On
放在文件顶部,对文件执行此操作。 真的,做吧。如果能够在发生之前捕获各种错误,最简单,最快捷的方法就是其中之一。你可能会得到几个小时的生命。我并不夸张。
关闭严格编译后,编译器会看到:
If MsgBoxResult.Yes Then
然后说,'如果/然后检查条件是真还是假。 MsgBoxResult.Yes
不是布尔值 - 它是一个整数。但是我会转换它,并说零以外的任何东西都是真的。'
问题是MsgBoxResult
的所有值都不为零。所以即使MsgBoxResult.No
也是真实的。"
使用Option Strict On
,您将收到此编译器错误:
Option Strict On禁止来自' MsgBoxResult'的隐式转换到'布尔'。
一旦你看到它,你就会意识到你的意思
If result = MsgBoxResult.Yes Then
在你运行程序之前,你将修复它。
编译器错误优于运行时错误,因为您不必调试代码以找出错误,或者更糟糕的是,让用户报告错误然后弄清楚出了什么问题。我们都会犯很少的错误,编译器会立即捕获它们。
当您启用严格编译时,您可能会看到大量其他错误。其中每一个都可能导致运行时错误。
关闭严格的编译可以让我们做各种各样的邪恶事情,比如
Private Sub WhatDoesThisDo(x As String, y As Integer, z As TriState)
If x And y And z Then
'do something
End If
End Sub
然后,如果你打电话
`WhatDoesThisDo("x", 0, TriState.UseDefault)`
您收到运行时错误,
System.InvalidCastException:'从字符串转换" x"输入' Long'无效。'
这就像拥有双向高速公路而不是让汽车在整个地方开车,并希望他们不会互相撞击。它不能保证能够预防事故,但它消除了巨大的潜在原因。