Yes/No 消息框总是 returns 是 - VB.Net
Yes/No message box always returns yes - VB.Net
我正在试验消息框,并尝试了一个简单的 yes/no 消息框
所以我写了这段简单的代码。但是,无论我按什么按钮,"chc" 变量总是 returns 为 1。我提供了代码,所以你可能会看到我做错了什么。这可能是非常错误的。
If MsgBoxResult.Yes Then
chc = 1
ElseIf MsgBoxResult.No Then
chc = 0
End If
MsgBox(chc)
MsgBox()
方法返回 MsgboxResult
Enumeration,检查方法 returns 的值:
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
开启严格编译。
- 您可以通过将
Option Strict On
放在文件顶部来对文件执行此操作。
- 您可以在项目属性 > 编译 > 编译选项中为项目执行此操作,将 Option strict 设置为 On。
- 在“工具”>“选项”>“项目和解决方案”>“VB 默认值”中将其设为所有项目的默认值。
真的,去做吧。如果是在各种错误发生之前捕获它们的最简单、最快捷的方法之一。您可能会恢复数小时的生活。我没有夸张。
关闭严格编译后,编译器会看到:
If MsgBoxResult.Yes Then
并说,'If/then 检查条件是真还是假。 MsgBoxResult.Yes
不是布尔值 - 它是整数。但我会转换它,并说除零以外的任何值都是真的。'
问题是 MsgBoxResult
的所有值都不为零。所以即使 MsgBoxResult.No
也是 "true."
使用 Option Strict On
,您将收到此编译器错误:
Option Strict On disallows implicit conversions from 'MsgBoxResult' to 'Boolean'.
一旦你看到它,你就会意识到你的意思
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: 'Conversion from string "x" to type 'Long' is not valid.'
这就像拥有一条双向高速公路,而不是让汽车到处行驶并希望它们不会相互碰撞。它不能保证避免事故,但它消除了一个巨大的潜在原因。
我正在试验消息框,并尝试了一个简单的 yes/no 消息框 所以我写了这段简单的代码。但是,无论我按什么按钮,"chc" 变量总是 returns 为 1。我提供了代码,所以你可能会看到我做错了什么。这可能是非常错误的。
If MsgBoxResult.Yes Then
chc = 1
ElseIf MsgBoxResult.No Then
chc = 0
End If
MsgBox(chc)
MsgBox()
方法返回 MsgboxResult
Enumeration,检查方法 returns 的值:
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
开启严格编译。
- 您可以通过将
Option Strict On
放在文件顶部来对文件执行此操作。 - 您可以在项目属性 > 编译 > 编译选项中为项目执行此操作,将 Option strict 设置为 On。
- 在“工具”>“选项”>“项目和解决方案”>“VB 默认值”中将其设为所有项目的默认值。
真的,去做吧。如果是在各种错误发生之前捕获它们的最简单、最快捷的方法之一。您可能会恢复数小时的生活。我没有夸张。
关闭严格编译后,编译器会看到:
If MsgBoxResult.Yes Then
并说,'If/then 检查条件是真还是假。 MsgBoxResult.Yes
不是布尔值 - 它是整数。但我会转换它,并说除零以外的任何值都是真的。'
问题是 MsgBoxResult
的所有值都不为零。所以即使 MsgBoxResult.No
也是 "true."
使用 Option Strict On
,您将收到此编译器错误:
Option Strict On disallows implicit conversions from 'MsgBoxResult' to 'Boolean'.
一旦你看到它,你就会意识到你的意思
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: 'Conversion from string "x" to type 'Long' is not valid.'
这就像拥有一条双向高速公路,而不是让汽车到处行驶并希望它们不会相互碰撞。它不能保证避免事故,但它消除了一个巨大的潜在原因。