Entwickler-Ecke

WinForms - Inhalt der Textbox prüfen


Izze - So 08.02.09 09:45
Titel: Inhalt der Textbox prüfen
Ich habe Textboxen erstellt in denen nur Zahlen vorkommen dürfen.

Mit z. B.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        private void textBoxFett100_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Nur Komma, Zahlen und die Backslashtaste zulassen
            if (",1234567890\b".IndexOf(e.KeyChar.ToString()) < 0)
            {
                e.Handled = true;
            }            
        }

verhindere ich die Nutzung aller Tasten ausser Zahlen, Komma und Backslash.

Hier


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
        private void buttonBerechnen100G_Click(object sender, EventArgs e)
        {
            //Textboxen 100 auslesen und bei leerem Feld Zahl 0 einsetzen (int=Ganzzahl, double=Kommazahl)
            int a = String.IsNullOrEmpty(textBoxKcal100.Text) ? 0 : int.Parse(textBoxKcal100.Text);
            double b = String.IsNullOrEmpty(textBoxFett100.Text) ? 0 : double.Parse(textBoxFett100.Text);
            int c = String.IsNullOrEmpty(textBoxPortionsgroesse100.Text) ? 0 : int.Parse(textBoxPortionsgroesse100.Text);

            //Punkte berechnen, Ergebnis ausgeben und auf 2 Stellen hinter dem Komma begrenzen (es wird gerundet)
            //Formel für Points = "Fett*0,11 + kcal*0,0165"
            textBoxPunkte100.Text = ((((b * 0.11) + (a * 0.0165)) * c) / 100).ToString("0.##");            
        }

wird geprüft ob überhaupt etwas in der Textbox steht und wenn nicht wird automatisch eine 0 gesetzt.

a und c müssen Ganzzahlen sein, b darf eine Kommazahl sein!
Bei der Zulassung der Tasten in der Textbox a und c wurde Komma verboten.

Soweit so gut, allerdings habe ich immer noch das Problem, dass man mittels der rechten Mausttaste wirres Zeug einfügen kann.
Und selbst wenn es nur Zahlen sind, a und c dürfen kein Komma enthalten!
Sowohl als auch, es kommt eine Fehlermeldung.

Ich möchte nun entweder das Benutzen der rechten Maustaste verhindern, was evtl. das einfachste wäre (wenn ich auch nicht weiss wie), oder aber den falschen Inhalt abfangen und Meldung ausgeben, was vermtl. die schönere Variante ist.
Eine direkte Autokorrektur auf meinetwegen 0 ist auch OK.


JüTho - So 08.02.09 12:34

Hallo,

Du kannst es aufgeben, alle solche Eingaben zu verhindern. Unter In einer TextBox nur bestimmte Zeichen/Eingaben zulassen [http://www.mycsharp.de/wbb2/thread.php?threadid=17535] gibt es eine Reihe von Argumenten auch zu Ctrl+V.

Die einzige sinnvolle Änderung wäre etwas wie dieses:

C#-Quelltext
1:
2:
3:
int a = 0;     //  Vorgabewert gleich festlegen
if ( ! String.IsNullOrEmpty(textBoxKcal100.Text))
  int.TryParse(textBoxKcal100.Text, out a);

TryParse fängt auch alle falschen Inhalte ab - egal wie sie in die TextBox gelangt sind.

Gruß Jürgen


Izze - So 08.02.09 14:03

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Die einzige sinnvolle Änderung wäre etwas wie dieses:

C#-Quelltext
1:
2:
3:
int a = 0;     //  Vorgabewert gleich festlegen
if ( ! String.IsNullOrEmpty(textBoxKcal100.Text))
  int.TryParse(textBoxKcal100.Text, out a);

TryParse fängt auch alle falschen Inhalte ab - egal wie sie in die TextBox gelangt sind.


Jop, das hat völlig gereicht.
Besten Dank!