Mehrere Argumente im Select Case

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Mehrere Argumente im Select Case

    Hallo,

    Ich habe eine Passwortabfrage mit "If ,then, else" erstellt und möchte es nun aber als select case.
    Dummerweise scheint mein entwurf nicht zu funktionieren.....

    Hier der originalcode :

    VB.NET-Quellcode

    1. If tb_pass1.Text = Nothing And tb_pass2.Text = Nothing Then
    2. MessageBox.Show("Die beiden Passwortfelder dürfen nicht leer sein!", "Fehler beim Setzen des Passworts", MessageBoxButtons.OK, MessageBoxIcon.Error)
    3. ElseIf tb_pass1.Text = Nothing Or tb_pass2.Text = Nothing Then
    4. MessageBox.Show("Sie müssen beide Passwortfelder ausfüllen!", "Fehler beim Setzen des Passworts", MessageBoxButtons.OK, MessageBoxIcon.Error)
    5. ElseIf tb_pass1.Text = tb_pass2.Text And tb_kennweis.Text = tb_pass2.Text Then
    6. MessageBox.Show("Der Kennworthinweis darf NICHT mit dem Passwort übereinstimmen!", "Fehler beim Setzen des Passworts", MessageBoxButtons.OK, MessageBoxIcon.Error)
    7. ElseIf tb_pass1.Text = tb_pass2.Text Then
    8. MessageBox.Show("Erfolgreich")
    9. Else
    10. MessageBox.Show("Die beiden Passwörter müssen übereinstimmen", "Fehler beim Setzen des Passworts", MessageBoxButtons.OK, MessageBoxIcon.Error)
    11. End If


    Habe das hier probiert :

    VB.NET-Quellcode

    1. Select Case tb_pass1.Text And tb_pass2.Text

    Ergibt mir aber einen Laufzeitfehler....

    VB.NET-Quellcode

    1. Select Case tb_pass1.Text

    Funktioniert logischerweise ja.
    Weiß also einer wie ich mehrere argumente da reinpacke?

    LG und danke im vorraus :)
    !! It's not a bug it's a feature !!

    PSPlover schrieb:

    If tb_pass1.Text = Nothing And tb_pass2.Text = Nothing Then

    Das wird niemals ausführen, da der String höchstens leer ist, aber nicht Nothing. Verstehst Du, was es bedeutet? Referenztypen können eine Instanz besitzen oder einen Null-Zeiger, in VB.NET heißt der Nothing. Du suchst String.IsNullOrWhiteSpace.

    Außerdem solltest Du And zu AndAlso und Or zu OrElse ändern.
    Desweiteren warum den Select Case? Das ist hier fehl am Platz und funktioniert ja sogar nicht, da ein Integral Type erwartet wird.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Das geht etwas schlauer vor und erspart Dir, dass weiter unnötig abgefragt wird.
    Unterschied zwischen "And" und "AndAlso"

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    PSPlover schrieb:

    mehrere argumente
    So was:

    VB.NET-Quellcode

    1. Select Case True
    2. Case String.IsNullOrEmpty(tb_pass1.Text) AndAlso String.IsNullOrEmpty(tb_pass2.Text)
    3. Case String.IsNullOrEmpty(tb_pass1.Text) OrElse String.IsNullOrEmpty(tb_pass2.Text)
    4. Case tb_pass1.Text = tb_pass2.Text AndAlso tb_kennweis.Text = tb_pass2.Text
    5. Case tb_pass1.Text = tb_pass2.Text
    6. Case Else
    7. End Select
    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!

    PSPlover schrieb:

    Was würdet ihr bevorzugen?
    Ich würde das If nehmen, das ist intuitiver.
    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!
    Ist doch eigentlich aus der Ansicht schon sichtbar. If ist eine wertvolle Kontrollstruktur, die einfach für sowas gemacht ist.
    Select Case würde ich wirklich nur für Integral Types verwenden und damit meine ich, dass diese das direkt schon sind.

    Wenn man halt Werte durchgehen muss, aber keine Abfragen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Gonger96 schrieb:

    VB.NET-Quellcode

    1. Switch(true)
    ist ein VB-Konstrukt, der in C# nicht funktioniert.
    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!

    RodFromGermany schrieb:

    der in C# nicht funktioniert.

    Typisch VB.NET... :> Alleine deshalb würde ich es nicht nutzen und richtig mit If machen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    Trade schrieb:

    Alleine deshalb
    nehme ich C#.
    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!

    PSPlover schrieb:

    Ok und was wäre jetzt bequemer?
    Was würdet ihr bevorzugen?
    erstmal konzipieren.

    Es scheint ja ein recht komplexes Regelsystem zu sein, bei dem die Werte von 4 Textboxen gegeneinander ins Verhältnis zu setzen sind.
    Nu hab ich aus dem Beispielcode das Regelsystem nicht eindeutig erkennen können, zumal es ja auch nicht richtig funktioniert.

    Also definiere erstmal die Regeln, dann kann man das auch in Code giessen, und dabei wird sich zeigen, ob If besser ist als Select Case, oder ob egal.

    Ich neige aber zu verschachtelten Ifs, denn zB wenn pass1 <> pass2 dann brauchen weitere Regeln garnicht mehr abgeprüft zu werden - richtig?