If Then Else, ElseIf

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Akanel.

    If Then Else, ElseIf

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. If TextBox1.Text = "" Then
    3. TextBox1.BackColor = Color.Red
    4. End If
    5. If TextBox2.Text = "" Then
    6. TextBox2.BackColor = Color.Red
    7. End If
    8. If TextBox3.Text = "" Then
    9. TextBox2.BackColor = Color.Red
    10. End If
    11. If TextBox10.Text = "" Then
    12. TextBox10.BackColor = Color.Red
    13. End If
    14. If CheckBox1.Checked = False Then
    15. CheckBox1.Enabled = False
    16. End If
    17. MessageBox.Show("Bitte füllen Sie alle notwendigen Felder aus, auch das Datum.", "Achtung", MessageBoxButtons.OK, MessageBoxIcon.Information)
    18. If MsgBoxResult.Ok Then
    19. TextBox1.BackColor = Color.White
    20. TextBox2.BackColor = Color.White
    21. TextBox3.BackColor = Color.White
    22. TextBox10.BackColor = Color.White
    23. CheckBox1.Enabled = True
    24. TextBox1.Focus()
    25. End If
    26. If TextBox1.TextLength > 0 And TextBox2.TextLength > 0 And TextBox3.TextLength > 0 And TextBox10.TextLength > 0 And CheckBox1.Checked = True Then
    27. Button2.Visible = False
    28. Button3.Visible = False
    29. PictureBox3.Focus()
    30. PrintDialog1.Document = PrintDocument1
    31. PrintDialog1.PrinterSettings.PrinterName = "Brother MFC-L9570CDW series"
    32. Me.PrintDocument1.Print()
    33. Button2.Visible = False
    34. Button3.Visible = True
    35. End If
    36. End Sub


    Hallo an alle Mitglieder,

    leider komme ich hier nicht weiter. Bitte nicht wundern, die ersten If Anweisungen habe ich mit Absicht so erstellt, normanl mit AndAlso. Oder nur And.
    Mein Problem ist folgendes: Wenn der User nicht alle Felder ausgefüllt hat, sollen die Boxen BackColor rot haben. Klickt er auf die MsgBox werden sie wieder weiß.
    Das klappt auch alles. Wenn die Felder ausgefüllt sind, kommt nochmal die MsgBox wenn ich auf Drucken klicke. Es wird zwar dann wie gewünscht gedruckt, nun aber meine Frage, wie erreiche ich es, das die MsgBox
    nicht mehr angezeigt wird, wenn alle Bedingungen erfüllt sind und der Drucker anspringt?

    Ich bin kein Studierter, sondern nur ein Hobby Programmier - seht ihr warscheinlich auch am Code, aber vielleicht kann mir jemand helfen, ich wäre sehr dankbar.
    @Philli Willkommen im Forum. :thumbup:
    Zunächst sollte es wohl heißen:

    VB.NET-Quellcode

    1. If TextBox3.Text = "" Then
    2. TextBox2.BackColor = Color.Red ' => TextBox3.BackColor = Color.Red
    3. End If
    And testet beide verknüpfte Bedingungen ab, AndAlso bricht ab, wenn die erste Bedingung False ergibt, das geht also schneller.
    And und Or testen bitweise: 3 And 2 = 2; 1 Or 2 = 3
    AndAlso und OrElse testen logisch den gesamten Ausdruck:
    True OrElse X => True
    False AndAlso Y => False
    wobei X unx Y beliebig für True und False stehen können.
    ====
    Überlege zunächst, was passieren soll.
    Dann setze einen Haltepunkt in Deinen Code und überprüfe, ob Dein Code auch das tut, was er tuen soll:
    Debuggen, Fehler finden und beseitigen
    Und:
    Das PrintDocument wird dem PrintDialog bereits im Designer als Property zugewiesen.
    Den Namen des Druckers würde ich nicht in den Code schreiben, damit es nicht knallt, wenn der Drucker nicht vorhanden oder nicht angeschaltet ist.
    Lies ihn aus und biete ihn an auszuwählen:
    Drucken mehrseitiger Dokumente
    Eine PictureBox kann mit dem Fokus im Prinzip nix anfangen.
    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!
    @Rod,
    klar, der von Dir dargestellte Code - fetter Fehler. Hatte ich leider nicht darauf geachtet. Vielen Dank für den Hinweis.
    Aber auch vielen Dank für Deine Erklärungen, ich werde mir morgen Deine Links anschauen und mal über die Haltepunkte gehen, wo der Fehler liegen kann.
    Kann nun wirklich nicht so kompliziert sein, eher etwas für Anfänger wie mich.
    Ich danke Dir für Deine Antwort.

    VB.NET-Quellcode

    1. If TextBox3.Text = "" Then
    2. TextBox2.BackColor = Color.Red ' => TextBox3.BackColor = Color.Red
    3. End If

    geht gar nicht !!!

    Philli schrieb:

    geht gar nicht !!!
    Kannst Du Dich bitte etwas präziser ausdrücken?
    Wenn ich Deinen Code kopiere und Deine angesprochenen Controls auf das GUI ziehe, geht das sehrwohl.
    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!
    Mal zurück zur Ausgangsfrage

    Philli schrieb:

    Mein Problem ist folgendes: Wenn der User nicht alle Felder ausgefüllt hat, sollen die Boxen BackColor rot haben. Klickt er auf die MsgBox werden sie wieder weiß.
    Das klappt auch alles. Wenn die Felder ausgefüllt sind, kommt nochmal die MsgBox wenn ich auf Drucken klicke. Es wird zwar dann wie gewünscht gedruckt, nun aber meine Frage, wie erreiche ich es, das die MsgBox
    nicht mehr angezeigt wird, wenn alle Bedingungen erfüllt sind und der Drucker anspringt?


    In Deinem aktuellen Code muss die Msgbox eigentlich immer kommen. Du prüfst ja nicht, ob diese notwendig ist.
    Deine Überprüfungen sind auch nicht vollständig. Was passiert, wenn der Anwender einfach ein Leerzeichen eingibt?
    Was Du beim Prüfen der Checkbox machst ist für mich nicht verständlich? Warum setzt Du Sie wenn Sie nicht ausgewählt wurde auf Enabled=False?

    Hier mal wie eine Lösung aussehen könnte:

    VB.NET-Quellcode

    1. Dim blnUnvollstaendig as boolean = false
    2. If Trim(TextBox1.Text) = vbNullString Then
    3. TextBox1.BackColor = Color.Red
    4. blnUnvollstaendig = True
    5. End If
    6. ...
    7. If blnUnvollstaendig = True Then
    8. MsgBox Unvollständig
    9. Farbe zurücksetzen (ohne die If Bedingung)
    10. Else
    11. Drucken
    12. End If
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    @INOPIAE
    Dein Code beinhaltet den VisualBasic Namespace, der sollte nicht mehr vohanden sein. Da sollte eher mit String.IsNullOrEmpty oder String.IsNullOrWhitespace gearbeitet werden.

    Ich würde hier auch einen ErrorProvider empfehlen.
    ErrorProvider aus der ToolBox aufs Form ziehen evtl umbenennen und dann so etwas in der Art:

    VB.NET-Quellcode

    1. If String.IsNullOrWhiteSpace(TextBox.Text) Then
    2. ErrorProvider1.SetError(TextBox, "Angabe ist erforderlich.")
    3. e.Cancel = True
    4. Else
    5. ErrorProvider1.SetError(TextBox, String.Empty)
    6. End If
    7. If e.Cancel Then
    8. Media.SystemSounds.Beep.Play()
    9. End If


    Im Designer sollte die Textbox hierbei rechts ein Margin von mindestens 8 haben da dort das Icon vom ErrorProvider angezeigt wird.
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.