[英]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
來對文件執行此操作。 真的,做吧。 這是最簡單,最快的方法,可以在各種錯誤發生之前將其捕獲。 您可能會恢復數小時的生活。 我一點都不誇張。
關閉嚴格編譯后,編譯器將看到以下內容:
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.