簡體   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