wie kann ich Prüfen ob der User als eingabe in eine Textbox 0 eingegeben hat (c# winforms visual studio)?
Hi, ich möchte das sobald ich in meinem Programm auf speichern drücke geprüft wird ob der user in eine Textbox 0 eingegeben hat. wie schreibe ich die if dafür?
2 Antworten
Am einfachsten Lässt sich ein String auf mehere Varianten prüfen indem man Regex verwendet.
Ein RegexPattern "^0+$" würde jeden String matchen, der aus 1 oder mehr 0en besteht.
also:
- 0
- 000
- 00000000000000
Allerdings wäre es für einen Nutzer ärgerlich, wenn er eine Eingabe tätigt und erst hinterher erfährt, das damit etwas nicht in Ordnung ist. Besser ist es wärend der Eingabe zu prüfen o er den erwarteten Vorgaben entspricht.
Hierfür verfügt TextBox über den .TextChanged -Handler . Ändert sich etwas in der Texbox, wir das Ereignis ausgelöst und man kann die nötigen Überprüfungen/Änderungen/Mitteilungen vornehmen.
Im folgenden Beispiel Prüfe ich in der 1. Texbox erst mit dem OK-Button🤮. In der 2 TextBox prüfe ich während der Eingabe 🤩 .
Demo.cs
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Text.RegularExpressions;
public class Form1 : Form {
private TextBox tib , tib2;
private Label Display1 , Display2;
private Button Button1 , Button2;
public Form1() {
this.Size = new Size(600,200);
Display1 = new Label();
Display1.Text = "Gib etwas Beliebiges ohne 0en am Anfang ein";
Display1.Location = new Point(10, 20);
Display1.AutoSize = true;
this.Controls.Add(Display1);
tib = new TextBox();
tib.Location = new Point(10, 40);
tib.AutoSize = true;
this.Controls.Add(tib);
Button1 = new Button();
Button1.Text = "OK";
Button1.Location = new Point(150, 40);
Button1.AutoSize = true;
Button1.Click += new System.EventHandler(Button1_Click);
this.Controls.Add(Button1);
Display2 = new Label();
Display2.Text = "Gib eine Zahl ohne führende 0en ein:";
Display2.Location = new Point(10, 70);
Display2.AutoSize = true;
this.Controls.Add(Display2);
tib2 = new TextBox();
tib2.Location = new Point(10, 90);
tib2.AutoSize = true;
tib2.TextChanged += new System.EventHandler(tib2_Changed);
this.Controls.Add(tib2);
Button2 = new Button(); //hier nur ein Dummy-Knopf
Button2.Text = "TueNix";
Button2.Location = new Point(150, 90);
Button2.AutoSize = true;
this.Controls.Add(Button2);
}
//Clickhandler für Butten1
private Regex rgxNoZero = new Regex(@"^0+.*$"); //beliebige Zeichen mit ein oder mehr Nullen am Anfang (ein Leerstring ist hier erlaubt!)
private void Button1_Click(object sender, EventArgs e){
if (rgxNoZero.IsMatch(tib.Text)) {
Display1.Text = "der Input hat 0en am Anfang";
Display1.ForeColor = Color.Red;
}
else {
Display1.Text = "Die Eingabe war in Ordnung";
Display1.ForeColor = default(Color);
}
}
//Check Texbox 2 während der Eingabe
private Regex rgxNoLeadingZeroNumber = new Regex(@"^[1-9]+\d*$"); // Zahl ohne Nullen am Anfang
private void tib2_Changed(object sender, EventArgs e){
if (rgxNoLeadingZeroNumber.IsMatch(tib2.Text)) {
Display2.Text = "Eingabe in Ordnung";
Display2.ForeColor = default(Color);
}
else {
Display2.Text = "Der Input ist nich zulässig";
Display2.ForeColor = Color.Red;
}
}
static void Main() {
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
if(textbox1.Text == "0")
{
}
Theoretisch so, kommt natürlich darauf an wie dein Textbox-Objekt heißt.
LG Knom
Zwei Anmerkungen:
Anmerkung 1: Wenn du die Nachricht bekommen hast, dass == nicht auf die Typen string und int awendbar ist, hast du wohl geschrieben:
if (textbox1.text == 0) {
also ohne Anführungszeichen (string quotes). Du musst zwischen Zahlenwerten einerseits, und Zeichenreihen, diedie SChreibform einer Zahl darstellen, genau unterscheiden.
Anmerkung 2: Der Vergleich von Zeichenreihen geschieht in C# nicht mit dem Operator == sondern mit der Methode Equals. Schreibe also bitte
if (textbox1.text.Equals("0")) {
und achte auf die Anführungszeichen.
Noch besser ist es, zu schreiben
if (textbox1.text.Trim().Equals("0")) {
dann werden nämlich alle der Null vorangehenden und folgenden Leerzeichen entfernt.
Schön, dass du das sagst. Solange es ungesagt war, konnte das niemand wissen.
Wenn das die Anforderung ist, wirst du die Eingabe in eine ganze Zahl umwandeln müssen. Das geht durchaus, ist aber ein wenig komplizierter als ein Vergleich zweier Zeichenreihen. Für die Umwandlung einer Zeichenreihe in eine ganze Zahl stehen die Methoden Int32.Parse und Int32.TryParse zur Verfügung. Int32.Parse signalisiert eine Ausnahmebedingung, wenndie Umwandlung nicht möglich ist. Int32.TryParye zeigt mit einem logischen Wert an, ob die umwandung erfolgreich war. TryParse ist dehalb oft bequemer zu verwenden als Parse
Probiere doch einmal folgendes aus:
int zahlwert;
if (Int32.TryParse(textbox1.text, out zahlwert)) {
if (zahlwert == 0) then {
// die gewünschte Aktion hier
}
else
{
// Die Eingabe ist keine Zahl
}
De jetzt Zahlenwerte verglichen werden, wird auch die Verwendung des Operators == möglich.
Der Vergleich von Zeichenreihen geschieht in C# nicht mit dem Operator == sondern mit der Methode Equals
Nein, es sind einfach nur zwei unterschiedliche Schreibweisen. In der Funktionalität unterscheiden sie sich nicht.
ist im Prinzip alles Schwachsinn .
Eine Eingabe überprüft man Effizient per RegEx
.Equals("0") würde nicht reagieren, wenn der Nutzer mehrere 0en eingibt.. Dann müsstest Du für Jeden möglichen Fall einzeln einen Vergeichsstring definieren!
Auch wen Regex nicht unbedingt jedermans Sache ist , gerade bei der Überprüfung von Nutzer-Eingaben kommt man nicht drumherum. Man kann garnicht so verrückt denken, was Nutzer so anstellen können und mit .equals() kann man eben nur einen Zustand testen...
TryParse() stellt erst einen Fehler fest, wenn das Kind bereits in den Brunnen gefallen ist. Bei Consoleneingaben geht es nicht anders. In einer GUI sollte man jedoch auf derartige Praktiken verzichten.
In einer Textbox kann man bereits während der Eingabe über den TextCanged-Handler prüfen ob eine Eingabe dem vorgegebenen Muster entspricht...
das habe ich so schon Probiert nur sagt er mir das er den == operator nicht auf den typ string und int anwenden kann