2017-12-25 39 views
2

메시지 상자를 사용하여 간단한 예/아니요 메시지 상자를 시도했습니다 그래서이 간단한 코드를 작성했습니다. 그러나 "chc"변수는 아무 버튼을 눌러도 항상 1로 반환됩니다. 코드를 제공 했으므로 내가 잘못한 것을 볼 수 있습니다. 그것은 아마도 끔찍한 잘못입니다. 엄격한 컴파일에예/아니오 메시지 상자가 항상 예 - VB.Net

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 
+2

열거 형 예와 아니요를 모두 비교합니다. 예를 6으로 평가하면 항상 참입니다. 코드를 더 표시하십시오 – Steve

답변

5

MsgBox() 방법은 MsgboxResultEnumeration을 반환, 메소드가 반환하는 값을 확인합니다.

  • Option Strict On을 파일의 맨 위에 배치하면 파일에 대해이 작업을 수행 할 수 있습니다.
  • 프로젝트 속성> 컴파일> 컴파일 옵션에서 Option strict를 On으로 설정하면 프로젝트에서이 작업을 수행 할 수 있습니다.
  • 도구> 옵션> 프로젝트 및 솔루션> VB 기본값에서 모든 프로젝트의 기본값으로 설정하십시오.

정말요. 오류가 발생하기 전에 모든 종류의 오류를 잡는 가장 쉽고 빠른 방법입니다. 인생에서 몇 시간을 되돌릴 수 있습니다. 나는 과장하지 않는다.

If MsgBoxResult.Yes Then 

을 그리고 '라고 만약 조건이 참인지 거짓인지에 대한/후 검사 : 엄격한 컴파일와

컴파일러는이보고, 꺼져. MsgBoxResult.Yes은 부울이 아닙니다. 정수입니다. 그러나 나는 그것을 개조 할 것이고, 제로 이외의 것이 모두 사실이라고 말할 것이다. '

MsgBoxResult의 모든 값은 0이 아닙니다. 심지어 MsgBoxResult.No조차도 "사실"입니다. Option Strict On

,이 컴파일러 오류 얻을 것이다 : 빨리 당신이 그것을 볼로

Option Strict On disallows implicit conversions from 'MsgBoxResult' to 'Boolean'.

그리고를, 당신은 당신이

If result = MsgBoxResult.Yes Then 

을 의미하는 것을 깨닫게거야, 그리고 당신이 그것을 고칠 수 있습니다 프로그램을 실행하기도 전에.

컴파일러 오류는 무엇이 잘못 되었는가를 알아 내기 위해 코드를 디버그 할 필요가 없기 때문에 런타임 오류보다 낫습니다. 사용자가 오류를보고하고 잘못된 점을 파악하게해야하기 때문입니다. 우리 모두는 오류를 거의 발생시키지 않고 컴파일러는 즉시 오류를 잡아냅니다.

엄격한 컴파일 기능을 켜면 다른 많은 오류가 표시 될 수 있습니다. 이들 각각은 런타임 오류를 일으킬 수있는 무언가입니다.

갖는 엄격한 컴파일, 당신은

`WhatDoesThisDo("x", 0, TriState.UseDefault)` 

당신은 런타임 오류가 호출하는 경우 다음

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 

처럼 악한 모든 일을 할 수있게 해준다 해제

System.InvalidCastException: 'Conversion from string "x" to type 'Long' is not valid.'

그것은 자동차가 장소 전체를 몰아 내고 그들이 원하는대로 두 방향 고속도로가있는 것과 같습니다. 서로 부딪치지 마라. 사고를 예방하는 것은 보장 할 수 없지만 엄청난 잠재적 인 원인을 제거합니다.

+0

완벽하게 작업했습니다. 감사. – user9139683

1

켭니다

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

MsgBox(chc)