2016-12-02 2 views
2

私はvbのテキストボックスに入力された特定のブーツサイズをチェックしています。サブルーチンを使用してサイズを確認し、ボタンをクリックした後にルーチンを呼び出す必要があります。正しいサイズが入力されても、値を何に関係なくボタンをクリックするとfalseを返します。ここでは、サブルーチンとボタンをクリックするためのコードです。サブボックスのサイズをテキストボックスで確認するには、vb

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には常に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

Wow!迅速な入力をありがとうございました!私はかなりの時間この周りで遊んでいたので、役に立つ。もし私が高い評価を受けていたら、私は投票をしようと思いますが、私が積み重ねているように、このような役に立つ人たちをここに見てうれしいです。再度、感謝します! – DodgerT

+0

@DodgerT助けてくれてうれしいです。 –

関連する問題