Wert zwischen "180 und 220" abfragen: If ... Then ... Else

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Wert zwischen "180 und 220" abfragen: If ... Then ... Else

    Ja und zwar folgendes ich mach ein "Quiz" als Projekt für meine Schule so die Frage lautet: "Wie viele Knochen hat ein ausgewachsener Mensch (ungefähr)?
    So da ja kein Mensch die genaue Zahl (206) sagen kann möchte ich es demjenigen leichter machen indem es darum geht das wenn er in der Textbox: "Vögeltxt.Text" (warum die so heißt keine Ahnung :P) eine Zahl zwischen 180 und 220 angibt es richtig hat und Sonst ("Else") nicht die darauffolgende Ereignisse funktionieren alle wunderbar, es liegt nur an dieser Zeile:

    VB.NET-Quellcode

    1. If Vögeltxt.Text = 206 Then ...


    anstatt 206 würd ich gern sowas wie "180 bis 220" dastehen haben nur wie gebe ich das an?? Ich hab schon sehr viel gegooglet aber hab nichts gefunden wahrscheinlich weil ich nicht weiß wie ich das richtig forumlieren soll wahrscheinlich ist meine Überschrift genauso falsch ... :)

    Währe megaa super geil wenn mir da jemand helfen kann, alles andere hab ich bisher selbst geschafft oder mit der Hilfe von Google :P

    Und hier für alle nochmal der Ganze Code dieser Frage:

    VB.NET-Quellcode

    1. Private Sub cmdEinloggen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEinloggen.Click
    2. If Vögeltxt.Text = 206 Then
    3. Frage1.Seiten = 9
    4. fr2r.Visible = True
    5. fr2a.Visible = False
    6. cmdEinloggen.Visible = False
    7. fr2r.Refresh()
    8. fr2a.Refresh()
    9. MsgBox("Das war Richtig! Ein erwachsener Mensch hat ca. 206 Knochen. ", MsgBoxStyle.OkOnly)
    10. System.Threading.Thread.Sleep(1000)
    11. Frage9.Show()
    12. fr2r.Visible = False
    13. fr2a.Visible = True
    14. cmdEinloggen.Visible = True
    15. Vögeltxt.Text = ""
    16. Me.Hide()
    17. Else
    18. fr2f.Visible = True
    19. fr2a.Visible = False
    20. fr2f.Refresh()
    21. fr2a.Refresh()
    22. System.Threading.Thread.Sleep(1000)
    23. If MsgBox("Falsch! Ein erwachsener Mensch hat circa 200 Knochen. Sie haben leider verloren!(Da wir keinen Sound haben, denken Sie sich die WWM-Musik ;P)Wollen Sie noch einmal von vorne beginnen?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
    24. ElseIf MsgBoxResult.No Then
    25. Me.Close()
    26. End If
    27. End If
    28. End Sub

    VB.NET-Quellcode

    1. For i As Integer = 180 To 220
    2. If Convert.ToInt32(TextBox1.Text) = i Then
    3. MsgBox("Super!")
    4. Else
    5. MsgBox("Leider falsch!")
    6. End If
    7. Next


    Oh, hätte ich beinahe vergessen:
    Wilkommen im Forum :thumbup:

    Würde dann so aussehen:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. For i As Integer = 180 To 220
    2. If Convert.ToInt32(TextBox1.Text) = i Then
    3. Frage1.Seiten = 9
    4. fr2r.Visible = True
    5. fr2a.Visible = False
    6. cmdEinloggen.Visible = False
    7. fr2r.Refresh()
    8. fr2a.Refresh()
    9. MsgBox("Das war Richtig! Ein erwachsener Mensch hat ca. 206 Knochen. ", MsgBoxStyle.OkOnly)
    10. System.Threading.Thread.Sleep(1000)
    11. Frage9.Show()
    12. fr2r.Visible = False
    13. fr2a.Visible = True
    14. cmdEinloggen.Visible = True
    15. Vögeltxt.Text = ""
    16. Me.Hide()
    17. Else
    18. fr2f.Visible = True
    19. fr2a.Visible = False
    20. fr2f.Refresh()
    21. fr2a.Refresh()
    22. System.Threading.Thread.Sleep(1000)
    23. If MsgBox("Falsch! Ein erwachsener Mensch hat circa 200 Knochen. Sie haben leider verloren!(Da wir keinen Sound haben, denken Sie sich die WWM-Musik ;P)Wollen Sie noch einmal von vorne beginnen?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
    24. ElseIf MsgBoxResult.No Then
    25. Me.Close()
    26. End If
    27. End If
    28. Next


    Evtl. einmal hier nachschauen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Michael K.“ ()

    VB.NET-Quellcode

    1. Dim a = Integer.parse(TextBox1.Text))
    2. If a >= 180 and a <= 200 Then
    3. 'richtig
    4. Else
    5. 'flasch
    6. End If
    Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.

    BeryJu.org BeryJu.org/Blog
    OK ... und Danke für die freundliche Begrüßung und schnelle Hilfe auch noch so spät :)

    Ich hab jetzt mal den langen Code gesichert und wir arbeiten aus Übersichtlichkeitsgründen mit deiner "Kurz-Variante" mit kleiner Änderung:

    VB.NET-Quellcode

    1. For i As Integer = 180 To 220
    2. If Convert.ToInt32(TextBox1.Text) = i Then
    3. MsgBox("Super!")
    4. Me.Close()
    5. NächsteFrage.Show()
    6. Else
    7. MsgBox("Leider falsch!")
    8. Me.Close()
    9. End If
    10. Next


    So wenn ich eine falsche Zahl eingebe bspw. 50 dann kommt die MsgBox("Leider falsch!") und beim klicken auf OK schließt das Programm kommt darauf aber eine Fehlermeldung im Code: "Die Eingabe Zeichenfolge hat das falsche Format"

    Beim Eingeben von einer normal richtigen Lösung bspw. 190 oder 200 sowie 220 passiert genau das gleiche wie drüber

    Und beim Eingeben der Zahl "180" kommt erst MsgBox("Super!") und dann stürtzt das Programm ab mit der Fehlermeldung "Die Eingabe Zeichenfolge hat das falsche Format"

    Mhmm und aus dem Link werd ich iwie nicht schlauer sry :) dürfte doch normal nicht so kompliziert sein sondern eine ganz einfache Lösung geben ?
    Hehe :D

    Bei dem Vorschlag von JensMan kommt folgendes Problem sobald ich die erste Frage richtig beantworte sollte diese Form sich schließen und die nächste Form/Frage sich öffnen:

    VB.NET-Quellcode

    1. Frage8.Show()
    2. Me.Hide()


    dabei kommt aber folgende Meldung: Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt..


    andere Dumme Frage würde das auch funktionieren:

    VB.NET-Quellcode

    1. If Vögeltxt.Text = 180 Or 181 Or 182 Or 183 ... Then
    2. Frage1.Seiten = 9
    3. fr2r.Visible = True
    4. fr2a.Visible = False
    5. cmdEinloggen.Visible = False
    6. fr2r.Refresh()
    7. fr2a.Refresh()
    8. MsgBox("Das war Richtig! Ein erwachsener Mensch hat ca. 206 Knochen. ", MsgBoxStyle.OkOnly)
    9. System.Threading.Thread.Sleep(1000)
    10. Frage9.Show()
    11. fr2r.Visible = False
    12. fr2a.Visible = True
    13. cmdEinloggen.Visible = True
    14. Vögeltxt.Text = ""
    15. Me.Hide()
    16. Else
    17. fr2f.Visible = True
    18. fr2a.Visible = False
    19. fr2f.Refresh()
    20. fr2a.Refresh()
    21. System.Threading.Thread.Sleep(1000)
    22. If MsgBox("Falsch! Ein erwachsener Mensch hat circa 200 Knochen. Sie haben leider verloren!(Da wir keinen Sound haben, denken Sie sich die WWM-Musik ;P)Wollen Sie noch einmal von vorne beginnen?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
    23. ElseIf MsgBoxResult.No Then
    24. Me.Close()
    25. End If
    26. End If
    27. Next


    wäre zwar viel Arbeit aber das ist mir dann auch egal aber vlt kommt es ja hoffentlich noch zu einer Lösung weil das wären vlt nur 40x Or aber irgendwann hab ich evtl größere Intervalle :)
    das von mir sollte eigentlich funktionieren, muss nur mal schauen bei Integer.parse().
    Ich habs grad nicht im Kopf.
    Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.

    BeryJu.org BeryJu.org/Blog
    Ich habs: Dein Programm "friert ein".
    Nimm mal das hier:

    VB.NET-Quellcode

    1. For i As Double = 180 To 220
    2. If Convert.ToDouble(TextBox1.Text) = i Then
    3. MsgBox("Super!")
    4. Me.Close()
    5. Else
    6. If MsgBox("Falsch! Ein erwachsener Mensch hat circa 200 Knochen. Sie haben leider verloren!(Da wir keinen Sound haben, denken Sie sich die WWM-Musik ;P)Wollen Sie noch einmal von vorne beginnen?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
    7. ElseIf MsgBoxResult.No Then
    8. Application.Exit()
    9. End If
    10. End If
    11. Next


    Und zwar wegen System.Threading.Thread.Sleep(1000).
    Der schläft dir so weg. Das ist das Problem.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. For i As Integer = 180 To 220
    2. If Convert.ToInt32(TextBox1.Text) = i Then
    3. Frage1.Seiten = 9
    4. fr2r.Visible = True
    5. fr2a.Visible = False
    6. cmdEinloggen.Visible = False
    7. fr2r.Refresh()
    8. fr2a.Refresh()
    9. MsgBox("Das war Richtig! Ein erwachsener Mensch hat ca. 206 Knochen. ", MsgBoxStyle.OkOnly)
    10. Frage9.Show()
    11. fr2r.Visible = False
    12. fr2a.Visible = True
    13. cmdEinloggen.Visible = True
    14. Vögeltxt.Text = ""
    15. Me.Hide()
    16. Else
    17. fr2f.Visible = True
    18. fr2a.Visible = False
    19. fr2f.Refresh()
    20. fr2a.Refresh()
    21. If MsgBox("Falsch! Ein erwachsener Mensch hat circa 200 Knochen. Sie haben leider verloren!(Da wir keinen Sound haben, denken Sie sich die WWM-Musik ;P)Wollen Sie noch einmal von vorne beginnen?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
    22. ElseIf MsgBoxResult.No Then
    23. Application.Exit()
    24. End If
    25. End If
    26. Next
    kommt leider wieder die Meldung: "Die Eingabezeichenfolge hat das falsche Format." und "If Convert.ToInt32(TextBox1.Text) = i Then" wird Orange markiert

    Edit/: sogar bei beiden sowie auch bei JensMan Vorschlag ohne des Sleep kommt jedem seine Fehlermeldung und das Programm schmiert ab

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rene1803“ ()

    Hallo,

    Probier es mal so:

    VB.NET-Quellcode

    1. Dim number As Integer
    2. Dim converted As Boolean = Int32.TryParse(TextBox1.Text, number)
    3. If converted Then
    4. Select Case number
    5. Case 180 To 220
    6. MessageBox.Show("Treffer")
    7. Case Else
    8. MessageBox.Show("Daneben")
    9. End Select
    10. Else
    11. MessageBox.Show("Konnte nicht convertieren")
    12. End If


    mfG

    Derfuhr
    wunderbar das letzere klappt einwandfrei und bietet zudem noch völlig neue möglichkeiten, danke den code muss ich mir merken

    jetzt kann ich sogar angeben wenn die eingebene Zahl zwischen 0 und 180 ist dann msgbox mit "Zu niedrig" usw. echt nice :)
    Oder mit Verwendung einer definierten Extension:

    VB.NET-Quellcode

    1. Imports System.Runtime.CompilerServices
    2. Module SeveralExtensions
    3. <Extension()> _
    4. Public Function Inside(ByVal Value As Integer, ByVal minLimit As Integer, ByVal maxLimit As Integer) As Boolean
    5. Return Value >= minLimit AndAlso Value <= maxLimit
    6. End Function
    7. End Module
    und dann so:

    VB.NET-Quellcode

    1. Dim Number As Integer
    2. If Int32.TryParse(TextBox1.Text, number) AndAlso Number.Inside(180, 220) Then
    3. MessageBox.Show("Treffer")
    4. Else
    5. MessageBox.Show("keine Zahl oder außerhalb des gültigen Bereiches")
    6. End If

    Wäre auch eine schöne Möglichkeit...