Laden...

Textbox nur für Zahlen

Erstellt von kstanger vor einem Jahr Letzter Beitrag vor einem Jahr 431 Views
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr
Textbox nur für Zahlen

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
3.825 Beiträge seit 2006
vor einem Jahr

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

D
261 Beiträge seit 2015
vor einem Jahr

@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)

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

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
C
2.121 Beiträge seit 2010
vor einem Jahr

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.

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?

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

Ich habe jetzt numericUpDown gewählt. Damit ist das Problem nicht existent und es ist auch einfacher zu handhaben.

Karl Stanger
A
764 Beiträge seit 2007
vor einem Jahr

Hallo 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

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

Gut - da schau ich mal nach

Karl Stanger