wie kann ich Prüfen ob der User als eingabe in eine Textbox 0 eingegeben hat (c# winforms visual studio)?

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

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾

Dxniz 
Fragesteller
 03.11.2023, 14:02

das habe ich so schon Probiert nur sagt er mir das er den == operator nicht auf den typ string und int anwenden kann

0
BorisG2011  03.11.2023, 14:14
@Dxniz

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.

0
Dxniz 
Fragesteller
 03.11.2023, 14:36
@Dxniz

das Problem ist aber ich möchte das er auch bei einer eingabe von 00 in die if reingeht wie kann ich prüfen ob der user 0 oder 00 eingegeben hat oder 000 usw

0
BorisG2011  03.11.2023, 14:51
@Dxniz

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.

0
regex9  03.11.2023, 17:47
@BorisG2011
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.

1
Erzesel  04.11.2023, 12:14
@BorisG2011

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...

0
Erzesel  04.11.2023, 12:21
@BorisG2011

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...

0