繁体   English   中英

是/否消息框始终返回是-VB.Net

[英]Yes/No message box always returns yes - VB.Net

我正在尝试使用消息框,并尝试了一个简单的yes / no messagebox,所以我编写了这段简单的代码。 但是,无论我按什么按钮,“ chc”变量始终返回1。 我提供了代码,所以您可能会看到我做错了。 这可能是非常错误的。

If MsgBoxResult.Yes Then
    chc = 1
ElseIf MsgBoxResult.No Then
    chc = 0
End If

MsgBox(chc)

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

打开严格的编译。

  • 您可以通过在文件顶部放置Option Strict On来对文件执行此操作。
  • 您可以在项目属性>编译>编译选项中为项目执行此操作,将Option strict设置为On。
  • 在工具>选项>项目和解决方案> VB默认值中将其设置为所有项目的默认值。

真的,做吧。 这是最简单,最快的方法,可以在各种错误发生之前将其捕获。 您可能会恢复数小时的生活。 我一点都不夸张。

关闭严格编译后,编译器将看到以下内容:

If MsgBoxResult.Yes Then

并说:“是否/然后检查条件是对还是错。 MsgBoxResult.Yes不是布尔值-是整数。 但是我将其转换,并说除零以外的其他都是正确的。

问题是MsgBoxResult所有值MsgBoxResult为零。 因此,即使MsgBoxResult.No为“ true”。

使用Option Strict On ,您将得到以下编译器错误:

Option Strict On不允许从“ MsgBoxResult”到“ 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:'从字符串“ x”转换为'Long'类型的转换无效。

这就像有一条双向高速公路,而不是让汽车四处行驶,并希望它们不会相互碰撞。 不能保证防止发生事故,但是它消除了巨大的潜在原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM