2016-03-22 3 views
0

Ich mache ein Student Information System, wo ein Student ihre Ergebnisse eingeben und ihre Gesamtnote berechnen kann. Im Gruppenrahmen "Projektergebnisse" geben die Studenten ihre Projektergebnisse von 50 ein und ihr Prozentsatz wird in TextBox1 berechnet.Konvertieren von String in booleschen Wert .net

Allerdings möchte ich Kontrollkästchen für bestimmte Bedingungen einfügen; Wenn z. B. checkbox2 markiert ist, bedeutet dies, dass das Projekt 7 Tage zu spät eingereicht wurde = 10% Abzug in der Abschlussnote. Ich habe den folgenden Code erfolgreich abgeschlossen, aber ich einen Laufzeitfehler aufweist:

Konvertierung von string "truetrue" eingeben 'Boolean' ist nicht gültig

enter image description here

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim a As Integer 
    Dim b As Decimal 

    If IsNumeric(TextBox3.Text) & CheckBox2.Checked.ToString Then 
     If TextBox3.Text <= 20 Then 
      a = (TextBox3.Text * 100)/20 
      TextBox4.Text = a 
      b = a * 0.1 - 0.1 

      TextBox5.Text = CDec(b) 




     Else 
      MsgBox("Please Enter value equal to 20 and below!") 
     End If 
    End If 

Ich frage mich, wie ich einen booleschen Wert in einen String umwandeln kann oder ob meine Aufgabe besser erledigt werden kann?

+2

Wenn Sie schalten 'Option Strict On' Sie Ihre Fehler sehen sofort, da dies nicht kompiliert werden. Das sollte Ihnen einen Zeiger geben –

+0

Hallo, Wenn jemand Antwort für Sie arbeitet, klicken Sie auf das Häkchen daneben. - Es hilft anderen Benutzern, die nach Lösungen suchen. Sie können sehen, dass eine Antwort auf eine Frage akzeptiert wurde und für sie funktionieren könnte. Und natürlich bekommt die Person, die die Frage beantwortet hat, einen guten Ruf - Und (dank @JamesThorpe) bekommt man 2 Wiederholungen für die Annahme. –

Antwort

3

CheckBox2.Checked ist bereits ein boolean. Wenn Sie am Ende ToString hinzufügen, erzwingen Sie, dass es eine Zeichenfolge ist. Dies, zusammen mit dem & davor, der der String-Verkettung-Operator ist, ist der Grund, warum Sie mit "TrueTrue" enden. Was Sie wollen, ist dies:

If IsNumeric(TextBox3.Text) And CheckBox2.Checked Then 

Randbemerkung: die Kontrollkästchen haben Sie es bedeuten, dass der Benutzer nur einer von ihnen werden die Wahl (etwas kann nicht gleichzeitig auf Zeit und spät, zum Beispiel) - Radioknöpfe würden hier eine bessere UI-Wahl sein.

+0

Funktioniert perfekt danke, ich habe auch Checkboxen auf Radio Buttons geändert! – MLL

0

Sie sollten die Zeile

ändern
If IsNumeric(TextBox3.Text) And CheckBox2.Checked Then 

oder überprüfen Sie schneller mit

If IsNumeric(TextBox3.Text) AndAlso CheckBox2.Checked Then 

Warum?

VB verwendet And statt & und verwendet AndAlso statt &&.

Die & Operator in VB wird zum Erzwingen Zeichenfolge Verkettung verwendet.

So ist die Linie If IsNumeric(TextBox3.Text) & CheckBox2.Checked.ToString Then (wenn beide wahr ist)

Equals If True & True Then

Und If "TrueTrue" Then

werden Da es keine Konvertierung vom Typ Auto sind String-Boolean, so wird die Ausnahme ausgelöst.

Die Verwendung von AndAlso wird etwas schneller sein als die Verwendung von And, da nachfolgende Bedingungen nicht ausgewertet werden, wenn sich eine frühere Bedingung als falsch erweist.

Vergleich zwischen VB und C++

VB  | C++ 
And  | & 
AndAlso | && 

Hinweis

@James Thorpe Lösung funktioniert auch, aber ich schlage vor, mit AndAlso. auch

Siehe:

Which is better for performance? And vs AndAlso

Differences in boolean operators: & vs && and | vs ||

+0

Während Sie in Bezug auf die Leistung richtig sind, in dieser Situation, wo etwas nur einmal in einer Berechnung ausgeführt wird und nach einem 'IsNumeric' ausgeführt wird und nur eine boolesche Eigenschaft überprüft, anstatt irgendetwas Komplexes zu tun, vermute ich, dass das Leistungsunterschied wird sich hier nie zu sorgen machen. –

+1

@JamesThorpe Ja, aber ich denke, Programmierer sollten sich dessen bewusst sein. Siehe Artikel [this] (http://stackoverflow.com/questions/4014535/differences-in-boolean-operators-vs-and-vs). – J3soon

+1

Absolut, ich sage nur, dass es sich nicht lohnt, sich um _here_ zu sorgen. Es ist ein guter Nachtrag zu Ihrer Antwort, aber was Ihre Antwort hier verbessern würde, wäre zu erklären, warum das OP diese Codezeile ändern sollte. Sie sind direkt von "Sie sollten das tun" ohne ein "Warum sollten Sie das tun" auf etwas bezogen, aber erklärt das eigentliche Problem überhaupt nicht. –