2016-12-02 7 views
2

Ich arbeite an der Überprüfung einer bestimmten Bootsgröße in einem Textfeld in VB eingegeben. Wir müssen eine Unterroutine verwenden, um die Größe zu überprüfen, und dann die Routine nach dem Klicken der Schaltfläche aufrufen. Wenn ich auf die Schaltfläche klicke, egal was der Wert ist, wird false zurückgegeben, selbst wenn die richtige Größe eingegeben wird. Hier ist der Code für die Unterroutine und Schaltfläche klicken.Sub, um eine Größe in einem Textfeld zu überprüfen, 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 

Antwort

3

Ich sehe ein paar Dinge, die mit Ihrer Routine verbessern könnten. Zunächst einmal sollte der Vergleich sein:

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

Die Art und Weise Sie es vor If a = 6 or 7 or 8 ... taten, nicht funktioniert, weil jede ganze Zahl ohne Vorzeichen wird immer auf true bewerten. Als Ergebnis wurde Ihr Code immer b = true erhalten. Der Grund, warum Sie immer falsch waren, war, weil Visual Basic Booleans standardmäßig auf false initialisiert und Sie nie check, also check = false, etwas zuweisen.

Auf der anderen Seite würde ich eine Funktion erstellen, anstatt einen Wert als Referenz zu übergeben. Eine Funktion würde alle notwendigen Berechnungen durchführen und einen Wert zurückgeben. Der vollständige Code sieht wie folgt:

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 

Die Art und Weise Sie es taten, waren Sie die Zuordnung b = true und b = false. Ich glaube, Sie wollten check zuweisen, um stattdessen wahr oder falsch zu sein, da es der Wert ist, den Sie später überprüfen.

Edit: Ein noch besserer Weg, dies zu tun und so viele Vergleiche vermeiden würde ein Array werden:

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 

Wie Sie sehen können, wenn Sie weitere Zahlen addieren müssen, fügen Sie sie einfach zu das Array. Sie können sie sogar bei Bedarf aus einer Datei lesen. Dann verwenden Sie die .Contains Funktion, um Ihren Wert zu vergleichen. Sie könnten auch einfach tun Return ValidNumbers.Contains(a) und vermeiden Sie die If/Else ganz:

+2

Wow! Vielen Dank für die schnelle Eingabe! SO hilfreich, da ich schon seit einiger Zeit damit herumspiele. Wenn ich einen höheren Ruf hätte, würde ich abstimmen, aber nett, so hilfreiche Leute hier zu sehen, da ich neu zu stapeln bin. Danke noch einmal! – DodgerT

+0

@DodgerT Froh, dass es geholfen hat. –

Verwandte Themen