Wie schreibe ich das jetzt genau (VB.Net Code)?
Hi,
Ich bin noch eher unerfahren in der Programmierung und möchte Wissen wie man das jetzt so schreibt.
If (Me.Username.Text = Text & Me.Password.Text = "") Then
Interaction.MsgBox("Error! You didn't enter your Password", MsgBoxStyle.OkOnly, Nothing)
End If
Und zwar da bei Me.Username.Text = Text. Wie kann ich es so schreiben, dass beispielsweise wenn einer seinen Nutzernamen eingetragen hat aber sein Passwort halt nicht, dann eine Fehlermeldung entsteht ? Ich weiß einfach nicht den richtigen Befehl dafür. Wenn einer nichts geschrieben hat, habe ich im Netz gelesen das man die 2x Gänsefüßchen oben benutzt. Aber wie sieht es jetzt aus wenn einer was in die TextBox eingetragen hat ? Wie schreibe ich es dann ? = Text hat leider nicht funktioniert und verursacht nur einen Fehler.
Danke im voraus.
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.
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
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?
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.
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
Dann lies nochmal meinen ersten Satz.
Willst du abfragen, ob IRGENDWAS eingetragen wurde, musst du auf <>"" vergleichen.
<> ist in VB der Operator "Ungleich".
@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.
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
Kann man das nicht irgendwie in einen Code reinquetschen?
So das es als eine einzige Meldung kommt und nicht als 2 einzelne MsgBoxen ?
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
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
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.
Danke für die Präzise Erklärung. Das hat mir schon einmal gut weitergeholfen. Aber der Code:
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:
Aber ich möchte es halt irgendwie so haben:
Ich weiß einfach nicht wie man es noch einfacher erklären könnte :/