2016-12-02 3 views
2

vb의 텍스트 상자에 입력 된 특정 bootsize를 확인하고 있습니다. 하위 루틴을 사용하여 크기를 확인한 다음 버튼을 클릭 한 후 루틴을 호출해야합니다. 아무리 값을 입력해도 버튼을 클릭하면 올바른 크기가 입력 되더라도 false로 반환됩니다. 다음은 서브 루틴과 버튼 클릭에 대한 코드입니다.서브 상자에서 텍스트 상자의 크기를 확인하려면,

Dim check As Boolean 
Dim b As Boolean 
Sub salomonsize(ByVal a As Integer, ByRef check As Boolean) 
    If a = 6 Or 7 Or 8 Or 9 Or 10 Or 11 Or 12 Then 
     b = True 
    Else 
     b = False 
    End If 
End Sub 
Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click 
Call salomonsize(txtSalomonSize.Text, check) 
    If check = False Then 
     MsgBox("Wrong size") 
     Exit Sub 
    End If 

답변

3

일상적으로 개선 할 수있는 몇 가지 사항이 있습니다. 우선, 비교해야한다 : 어떤 부호없는 정수는 항상 true로 평가하기 때문에 당신이 If a = 6 or 7 or 8 ...하기 전에 그 일을했다

If a = 6 Or a = 7 Or a = 8 Or a = 9 Or a = 10 Or a = 11 Or a = 12 Then 

방법이 작동하지 않습니다. 결과적으로 코드는 항상 b = true이되었습니다. Visual Basic은 기본적으로 부울을 false로 초기화하므로 check에 아무 것도 지정하지 않으므로 check = false에 항상 거짓이 표시됩니다.

반면에 참조로 값을 전달하는 대신 함수를 작성합니다. 함수는 필요한 모든 계산을 수행하고 값을 리턴합니다. 당신이 그 일을했다

Function salomonsize(ByVal a As Integer) As Boolean 
    If a = 6 Or a = 7 Or a = 8 Or a = 9 Or a = 10 Or a = 11 Or a = 12 Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 

Private Sub btnCompute_Click(sender As Object, e As EventArgs) Handles btnCompute.Click 
    Dim check = salomonsize(txtSalomonSize.Text) 
    If check = False Then 
     MsgBox("Wrong size") 
     Exit Sub 
    End If 
End Sub 

방법, 당신은 b = trueb = false 할당했다 : 전체 코드는 다음과 같습니다. 나중에 확인하는 값이기 때문에 check을 대신 true 또는 false로 지정해야한다고 생각합니다.

편집 : 당신이 볼 수 있듯이 당신이 더 이상 번호를 추가해야하는 경우

Function salomonsize(ByVal a As Integer) As Boolean 
    Dim ValidNumbers As Integer() = {6, 7, 8, 9, 10, 11, 12} 
    If ValidNumbers.Contains(a) Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 

, 당신은 단순히에 추가 :이 작업을 수행하고 많은 비교를 피하기 위해 더 좋은 방법은 배열을 사용하는 것 배열 필요한 경우 파일에서 읽을 수도 있습니다. 그런 다음 .Contains 함수를 사용하여 값을 비교하십시오. Return ValidNumbers.Contains(a)을 단순히 수행하고 If/Else를 완전히 피할 수 있습니다.

Function salomonsize(ByVal a As Integer) As Boolean 
    Dim ValidNumbers As Integer() = {6, 7, 8, 9, 10, 11, 12} 
    return ValidNumbers.Contains(a) 
End Function 
+2

와우! 빠른 입력에 감사드립니다. 그래서 나는 꽤 오랫동안 이걸 가지고 놀았으므로 도움이된다. 내가 더 높은 평판을 가졌다면 투표를 할 것이지만, 여기에 도움이되는 사람들을 만나서 반갑습니다. 다시 한 번 감사드립니다! – DodgerT

+0

@DodgerT 도움이 된 것을 기쁘게 생각합니다. –