Wie schreibe ich das jetzt genau (VB.Net Code)?

2 Antworten

Du kannst auf einen leeren String prüfen, oder, besser noch, auf Leerstring und null:

If String.IsNullOrEmpty(Username.Text) And String.IsNullOrEmpty(Password.Text) Then
    MessageBox.Show("Error! You didn't enter your Password", MessageBoxButtons.Ok, MessageBoxIcon.Error)
End If

Erklärungen zu o.g. Code:

  • IsNullOrEmpty aus dem Struct String gibt true zurück, wenn der übergebene String entweder leet ist ("") oder null
  • Me muss nicht zwingend angegeben werden, da beide TextBox-Objekte in der Form-Klasse definiert sind
  • MessageBox ist eine Klasse aus dem Namespace System.Windows.Forms und wird in der Regel im .Net-Framework für Meldungen aller Art benutzt
  • für das logische Und muss in VB.Net And verwendet werden, da das einfache & nur zwei Strings verknüpft (in C# wäre das einfache & ein bitweises Und, während + mehrere Strings verkettet)

TIPP: setze im Designer die Eigenschaft UseSystemPasswordChar für Password auf true. Denn dann wird das Standardzeichen für Passwörter anstelle des tatsächlichen Inhalts angezeigt.

Woher ich das weiß:Studium / Ausbildung

Hakku199991 
Beitragsersteller
 20.08.2018, 19:38

Danke für die Präzise Erklärung. Das hat mir schon einmal gut weitergeholfen. Aber der Code:

If String.IsNullOrEmpty(Username.Text) And String.IsNullOrEmpty(Password.Text) Then
    MessageBox.Show("Error! You didn't enter your Password", MessageBoxButtons.Ok, MessageBoxIcon.Error)
End If 

Prüft auch hier nur ob BEIDE TextBoxen ausgefüllt sind. Es kann jetzt immer noch einer den Login meines Clients umgehen, indem er einfach nur einen Namen eingibt aber das Passwort nicht. Dann läuft nämlich die ProgressBar einfach weiter obwohl das Passwort und oder der Name fehlt und nicht eingetragen wurde. Deshalb frage ich ja auch wie man das hinbekommen könnte, dass er auch einzeln nachprüft ob bei der einen TextBox das Passwort eingegeben wurde und bei der anderen der Name. Wenn beispielsweise jetzt nichts eingetragen wurde, dann verwendet man entweder die Variante die du da oben geschrieben hast, oder man schreibt einfach:

If (Username.Text = "") Then 
MessageBox.Show("You didn't enter your Username.")
End If 

Aber ich möchte es halt irgendwie so haben:

If (Username.Text  = "" & Password.Text = Irgendwas, dass halt angibt das die Passwort TextBox mit etwas ausgefüllt ist, sei es Buchstaben oder Zahlen) Then 
MessageBox.Show("Error! You entered your Username, but you didn't enter your Password.") 
End If 

Ich weiß einfach nicht wie man es noch einfacher erklären könnte :/

0
RBM1992  21.08.2018, 19:23
@Hakku199991

Da gibt es mehrere Möglichkeiten:

  • mit dem Schlüsselwort or eine Oder-Verknüpfung im If
  • verschachteltes If: erst den Usernamen, dann das Kennwort
  • am besten wäre es über If ... Then ... ElseIf ... Else

Hier ein Beispiel, wie die dritte Möglichkeit aussehen könnte:

' beide TextBoxen sind leer
If String.IsNullOrEmpty(Username.Text) And String.IsNullOrEmpty(Password.Text) Then
    MessageBox.Show("Error! You didn't enter your username and password", MessageBoxButtons.Ok, MessageBoxIcon.Error)
' Username ist leer
ElseIf String.IsNullOrEmpty(Username.Text) Then
    MessageBox.Show("Error! You didn't enter your username", MessageBoxButtons.Ok, MessageBoxIcon.Error)
' Password ist leer
ElseIf String.IsNullOrEmpty(Password.Text) Then
    MessageBox.Show("Error! You didn't enter your password", MessageBoxButtons.Ok, MessageBoxIcon.Error)
Else
    ' alles angegeben -> Login
End If
1

Willst du abfragen, ob IRGENDWAS eingetragen wurde, musst du auf <>"" vergleichen. Willst du abfragen, ob der Text "TEXT" eingetragen wurde, vergleichst du natürlich mit = "TEXT"

Wo ist das Problem?


Hakku199991 
Beitragsersteller
 19.08.2018, 10:21

Ne ne so meinte ich es nicht. Ach es ist kompliziert es zu erklären.
Ich möchte abfrage ob einer überhaupt irgendwas in die TextBox eingetragen hat und nicht einen bestimmten Text wie du jetzt sagtest "TEXT".
Halt einer schreibt in die eine TextBox sein Passwort und in der anderen wo der Nutzername rein sollte halt gar nichts. Und das sollte dann wiederum eine Fehlermeldung mit der MsgBox verursachen, die sagt das derjenige seinen Namen noch nicht eingetragen hat.

0
PWolff  19.08.2018, 11:53
@Hakku199991

Dazu brauchst du eine eigene Abfrage:


    Dim Fehlermeldung As String = ""

    If Username.Text = "" Then
      Fehlermeldung = Fehlermeldung + "Nutzername fehlt" + Environment.NewLine
    End If
...

    If Fehlermeldung <> "" Then
      MsgBox ...
      Return False ' oder Continue oder ...
    End If

0
sebastianla  19.08.2018, 12:00
@Hakku199991

Dann lies nochmal meinen ersten Satz.

Willst du abfragen, ob IRGENDWAS eingetragen wurde, musst du auf <>"" vergleichen.

<> ist in VB der Operator "Ungleich".

0
Hakku199991 
Beitragsersteller
 19.08.2018, 12:35
@PWolff

@PWolff
Danke, aber jetzt habe ich das Problem das die ProgressBar trotzdem weiter läuft wenn ich beispielsweise nur in die 1. TextBox etwas schreibe, aber in die andere halt nicht.
Und genau das meinte ich ja mit meiner Frage. Ich möchte wenn einer etwas in die 1. TextBox schreibt und in die andere 2. TextBox nicht, eine Fehlermeldung entsteht (sowie deine da oben) die halt genau das gleiche sagt.
Somit kann dann keiner den Mechanismus meines eigenen Login Clients umgehen wenn derjenige sich einloggen möchte. Die ProgressBar soll nämlich nur starten wenn BEIDE TextBoxen ausgefüllt sind. Und nicht wenn nur eine ausgefüllt ist und die andere nicht.

0
PWolff  19.08.2018, 20:24
@Hakku199991

Dann frag halt beide TextBoxes ab.

Wo ist das Problem?


    Dim Fehlermeldung As String = ""

    If Username.Text = "" Then
      Fehlermeldung = Fehlermeldung + "Nutzername fehlt" + Environment.NewLine
    End If

    If Password.Text = "" Then
      Fehlermeldung = Fehlermeldung + "Passwort fehlt" + Environment.NewLine
    End If

...

    If Fehlermeldung <> "" Then
      MsgBox ...
      Return False ' oder Continue oder ...
    End If
0
Hakku199991 
Beitragsersteller
 20.08.2018, 10:00
@PWolff

Kann man das nicht irgendwie in einen Code reinquetschen?
So das es als eine einzige Meldung kommt und nicht als 2 einzelne MsgBoxen ?

0
Hakku199991 
Beitragsersteller
 20.08.2018, 10:39
@PWolff

Oh... Egal. Das tut es ja schon. Danke.

0
Hakku199991 
Beitragsersteller
 20.08.2018, 10:49
@PWolff

Nur.... jetzt habe ich noch eine Frage.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Timer1.Start()

        Dim ErrorMessage As String = ""

        If (IP.Text = "") Then
            Timer1.Stop()
            ErrorMessage = ErrorMessage + "Error! IP Address is missing!" + Environment.NewLine
        End If

        If Port.Text = "" Then
            Timer1.Stop()
            ErrorMessage = ErrorMessage + "Error! Port is missing!" + Environment.NewLine
        End If

        If Data.Text = "" Then
            Timer1.Stop()
            ErrorMessage = ErrorMessage + "Error! Data is missing!" + Environment.NewLine
        End If

        If ErrorMessage <> "" Then
            Timer1.Stop()
            MsgBox("Error! IP Address, Port & Data is missing!")
        End If
    End Sub

Das wäre so ein Teil eines anderen Programmes an dem ich schreibe. Alles funktioniert perfekt. Aaaaberrrrr..... Da ist jetzt das folgende Problem. Nämlich, wenn ich jetzt auf den Button1 drücken würde OBWOHL eigentlich die TextBox von der IP Adresse ausgefüllt wurde und von den anderen halt nicht, kommt trotzdem die selbe Meldung das die IP Adresse nicht eingetragen wurde. Wie könnte ich es jetzt so schreiben, dass der Button weiß: "Aha, die TextBox von der IP wurde ausgefüllt, also gebe ich nun einen anderen Fehler zurück das der Port & die Data noch nicht eingetragen wurden". Und genau daran grübele ich jetzt schon mehrere Tage & weiß nicht wie ich es schreiben sollte.
Weil so schreibt man das ja sicherlich nicht.

        If ErrorMessage <> "" Then
            Timer1.Stop()
            MsgBox("Error! IP Address, Port & Data is missing!")
            ElseIf (IP.Text = Text oder String) Then
            MsgBox("Error! Port & Data is missing!")
        End If
0
PWolff  20.08.2018, 19:44
@Hakku199991

Dafür hast du ja die ErrorMessage vorher zusammengebaut. MsgBox will nur ein String als erstes Argument haben, wo das String herkommt, ist egal.

    If ErrorMessage <> "" Then
        Timer1.Stop()
        MsgBox(ErrorMessage)
    End If
1
Hakku199991 
Beitragsersteller
 20.08.2018, 20:12
@PWolff

Danke!!! Endlich nach so vielen Tagen kann ich die Arbeit an meinem Client beenden! ^^
Genau sowas wollte ich haben. Und ich dachte man muss da irgendwas extra deklarieren damit der Code endlich versteht das eine TextBox nicht ausgefüllt wurde und die andere schon.... dabei ist das so simpel gewesen... Wenn du eine Antwort selbst hier so geschrieben hättest und nicht als Kommentar, würde ich sie als hilfreichste auszeichnen.

0