Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Textbox nur für Zahlen
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

Textbox nur für Zahlen

beantworten | zitieren | melden

Hallo allerseits,
ich brauche eine Textbox, die ausschließlich Zahlen akzeptiert. Dazu habe ich mal rumgegoogled und mehr oder weniger komplizierte Lösungen gefunden. Letztendlich habe ich aber folgendes gemacht:


        private void TextBoxMaxLED_TextChanged(object sender, EventArgs e)
        {
            try
            {
                Globals.AnzahlLed = Convert.ToByte(TextBoxMaxLED.Text);
            }
            catch
            {
                TextBoxMaxLED.Text = "1";
                Globals.AnzahlLed = 1;
            }
        }

Dabei ist in meinem Fall Globals.AnzahlLed als byte definiert.
Wenn nun die Zuweisung im Event-Handler auf eine Exception läuft (bei byte wäre das alle Zeichen, die nicht Zahl sind, sowie Zahlen kleiner 0 oder größer 255) setze ich meine Textbox auf den Wert 1 (könnte auch 0 oder sonst etwas setzen). Ich denke, das ist eine einfache Lösung.
Was meint ihr? Gibt es bei meiner Lösung Dinge, die ich nicht berücksichtigt habe? Kann da etwas schief gehen?
Karl Stanger
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.026

beantworten | zitieren | melden

Dafür gibts eigentlich einfach https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.numericupdown
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.773
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Meine Routine um in einer Textbox nur Zahlen zuzulassen und "+" und "-" :


private void TextBoxMaxLED_KeyPress(object sender, KeyPressEventArgs e)
{
	str = "1234567890";
	if (TextBoxMaxLED.SelectionStart == 0) && !TextBoxMaxLED.Text.Contains("+") && !TextBoxMaxLED.Text.Contains("-")) str += "+-";
	bool controlkey = (e.KeyChar == 1 || e.KeyChar == 3 || e.KeyChar == 8 || e.KeyChar == 22 || e.KeyChar == 24 || e.KeyChar == 27);    // Back, Escape, Strg+A, Strg+C ...
	if ((!str.Contains(e.KeyChar.ToString())) && !controlkey) e.Handled = true;
}

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 225

beantworten | zitieren | melden

@BerndFfm
Mit diesem Code ist es aber immer noch möglich, dass ich Text in die Textbox einfügen kann. (entweder mittels Rechtsklick/Einfügen oder Strg+V)
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

numericUpDown war mir wohl bekannt, aber ich wollte die Auf- und Ab-Pfeile nicht.
Andererseits ist es besser, eine einfache (= NumericUpDown) Lösung zu nehmen.
Karl Stanger
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.109

beantworten | zitieren | melden

Die Beschränkung auf Ziffern kann man noch machen, aber viel mehr Logik halte ich für kontraproduktiv.
Ich fände es auch nicht schlimm wenn man zunächst beliebiges eingeben könnte und dann eine Meldung kommt "xyz ist kein gültiger Wert für ein Feld namens Anzahl, bitte eine Zahl eingeben" oder ähnlich. Sagt mehr aus als wenn eine Taste einfach nicht funktioniert.
Zitat
setze ich meine Textbox auf den Wert 1 ... Kann da etwas schief gehen?
Ja. Jemand kann etwas eingeben von dem er denkt das passt, aber dein Programm macht mehr oder weniger unbemerkt mit 1 weiter.
Einfach "irgendetwas" tun von dem man so gut wie sicher sein kann dass es falsch ist, ist eine der schlechtesten Idee um mit Fehleingaben umzugehen. Die Eingabe auf "irgendetwas" abändern ist ebenfalls eine der schlechtesten Idee. Wie kommt man auf sowas?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von chilic am .
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

Ich habe jetzt numericUpDown gewählt. Damit ist das Problem nicht existent und es ist auch einfacher zu handhaben.
Karl Stanger
private Nachricht | Beiträge des Benutzers
Alf Ator
myCSharp.de - Member



Dabei seit:
Beiträge: 671

beantworten | zitieren | melden

Hallo kstanger
Zitat von kstanger
numericUpDown war mir wohl bekannt, aber ich wollte die Auf- und Ab-Pfeile nicht.
Andererseits ist es besser, eine einfache (= NumericUpDown) Lösung zu nehmen.

Da sind ein paar Lösungen dabei:

Google Suche nach "c# numericupdown remove arrows"

Gruß
Alf
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

Gut - da schau ich mal nach
Karl Stanger
private Nachricht | Beiträge des Benutzers