Hilfe bei VS/Vb If mit mehreren Bedingungen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von INOPIAE.

    Hilfe bei VS/Vb If mit mehreren Bedingungen

    Hallo Zusammen,

    ich schreibe immer noch an meinem Auftrags/Angebots Programm in Visual Studio 2022.
    Ich habe wirklich viel gegoogelt und nun hänge ich "MAL wieder" .
    kann mir jemand vll sagen, wo mein Fehler liegt

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If TextBox2.Text <= 10 Then
    3. TextBox1.Text = "unter 10"
    4. ElseIf TextBox2.Text >= 11 < 20 Then
    5. TextBox1.Text = "über10"
    6. ElseIf TextBox2.Text >= 21 < 30 Then
    7. TextBox1.Text = "über 20"
    8. End If
    9. End Sub

    Die ersten zwei Bedingungen macht er mir, soch gebe ich 22 ein schreibt er immer noch "über 10"
    Das ist nur ein textbeispiel, es geht eigentlich um gesplittete Montagekosten (ab 10m² - x€ ...von 11 bis 20 m² -- xx€)
    Ich hoffe es kann mi jemand helfen- Schon mal danke
    Sonnige Grüße Evelyn

    CodeTags gesetzt ~VaporiZed

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

    Evelyn schrieb:

    ElseIf TextBox2.Text >= 11 < 20 Then
    1. Stelle dein Projekt unbedingt auf Option Strict On

    2. Deine Textbox enthält Text und du vergleichst mit Zahlen
    Wandle den Text in eine Zahl um, bevor du vergleichst.
    Wenn du Texte vergleichst, ist beispielsweise "100" kleiner als "20".
    Verwende Integer.TryCast, da du nicht sicher sein kannst, dass die Textbox mit Schrott befüllt ist.

    Alternativ, nimm ein NumericUpDown anstatt der Textbox

    3. Im zweiten Fall vergleichst du Text mit Boolean

    Evelyn schrieb:

    ElseIf TextBox2.Text >= 11 < 20 Then
    Verwende einen gültigen logischen Ausdruck

    VB.NET-Quellcode

    1. ElseIf TextBoxValue >= 11 AndAlso TextBoxValue < 20 Then
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Schalte mal "Option Strict On" ein und verstehe die Fehler.
    Schlagworte wären:
    String, Integer, Boolean, Vergleichsoperatoren, "AndAlso", "OrElse"

    Wenn noch weiter Fragen auftauchen, melde dich wieder.
    @Evelyn Nimm als Control für die Fläche keine TextBox, sondern ein NumericUpDown, das kann nur numerischer Werte.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Evelyn Lässt Du uns an Deinem Erfolg teil haben?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ups vergessen hier mein Code, der nun endlich funktioniert :D

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If ComboBox1.Text = "" Then
    MessageBox.Show("Farbe wählen")
    Else
    Dim menge As Single
    menge = Convert.ToDecimal(M1.Text)
    If menge <= 9.5 Then
    p1.Text = "402,00"
    ElseIf (menge >= 10) And (menge <= 14.5) Then
    p1.Text = "382,00"
    ElseIf (menge >= 15) And (menge <= 24.5) Then
    p1.Text = "366,00"
    ElseIf (menge >= 25) And (menge <= 49.5) Then
    p1.Text = "345,00"
    ElseIf (menge >= 50) And (menge <= 74.5) Then
    p1.Text = "328,00"
    ElseIf (menge >= 75) And (menge <= 99.5) Then
    p1.Text = "312,00"
    ElseIf (menge >= 100) Then
    p1.Text = "312,00"
    End If

    If Fragen.Montage.Text = "Ja" Then
    If menge <= 9.5 Then
    TextBox2.Text = "0"
    ElseIf (menge >= 10) And (menge <= 14.5) Then
    TextBox2.Text = "113,00"
    ElseIf (menge >= 15) And (menge <= 24.5) Then
    TextBox2.Text = "105,00"
    ElseIf (menge >= 25) And (menge <= 49.5) Then
    TextBox2.Text = "97,00"
    ElseIf (menge >= 50) And (menge <= 74.5) Then
    TextBox2.Text = "89,00"
    ElseIf (menge >= 75) And (menge <= 99.5) Then
    TextBox2.Text = "84,00"
    ElseIf (menge >= 100) Then
    TextBox2.Text = "81,00"
    End If
    Dim POS As String = ""
    Dim Einheit As String = mm1.Text
    Dim Bezeichnung As String = TextBox1.Text
    Dim Info As String = ComboBox1.Text
    Dim Montage As String = TextBox2.Text
    Dim Einzelpreis As Decimal = p1.Text
    Dim Gesamtpreis As Decimal = menge * (Einzelpreis + Montage)
    Angebot.DataGridView1.Rows.Add(POS, menge, Einheit, Bezeichnung, Info, Montage, Einzelpreis, Gesamtpreis)
    End If
    End If
    End Sub
    @Evelyn Nach

    VB.NET-Quellcode

    1. MessageBox.Show("Farbe wählen")
    machst Du

    VB.NET-Quellcode

    1. Return
    , da kannst Du den Else-Konstrukt weglassen.
    And ersetzt Du durch AndAlso.
    Dann kannst Du Deinen Post noch mal editieren und den Code als VB.NET-Quellcode formatieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Für diese Art der Überprüfung gibt es eigentlich die Select Case Anweisung:

    VB.NET-Quellcode

    1. Select Case menge
    2. Case < 10
    3. p1.Text = "402,00"
    4. Case < 15
    5. p1.Text = "382,00"
    6. Case < 25
    7. p1.Text = "366,00"
    8. Case < 50
    9. p1.Text = "345,00"
    10. Case < 75
    11. p1.Text = "328,00"
    12. Case < 100
    13. p1.Text = "312,00"
    14. Case Else
    15. p1.Text = "312,00"
    16. End Select


    Ich habe die Grenzen bewusst auf < gestellt. Was passiert zum Beispiel mit einer Menge 9,7. Auch wenn Du davon ausgehst, dass es diesen Wert nicht geben sollte. Anwender bekommen alles hin.
    Prüfe bitte ob Deine letzten Bedingungen notwendig sind:

    VB.NET-Quellcode

    1. ElseIf (menge >= 75) And (menge <= 99.5) Then
    2. p1.Text = "312,00"
    3. ElseIf (menge >= 100) Then
    4. p1.Text = "312,00"
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).