www.mikrocontroller.net

Forum: PC-Programmierung C# Eingabe von Buchstaben verhindern


Autor: Stefan_KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich arbeite mit Microsoft Visual C# 2010 und bin ganz neu in der 
Programmierg. Ich möchte eine einfache Eingabe von 2 Zahlen ermöglichen 
die dann addiert werden. Das Ergebnis wird in einem separaten Fenster 
angezeigt.

Ich habe dazu zwei Edit Felder für die Eingabe erstellt. Wie verhindere 
ich nun, dass Buchstaben eingegeben werden können (bzw. wenn nichts rein 
geschrieben wird)?

Ich habe noch eine Button eingefügt. Bei dessen Betätigung wird die 
Addition ausgeführt. Wird diese betätigt, ohne das etwas eingegbene 
wurde oder Buchstaben eingegeben wurde, hält das Programm an.

Kann mir jemand weiter helfen.
Danke

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dafür könnte man das onChange event verwenden, wenn dort ein Buchstabe 
drin steht musst du ihn einfach wieder loeschen. Das OnKey event ist 
nicht sinnvoll weil sonst könnte jemand dort text per maus einfügen.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> dafür könnte man das onChange event verwenden, wenn dort ein Buchstabe
> drin steht musst du ihn einfach wieder loeschen. Das OnKey event ist
> nicht sinnvoll weil sonst könnte jemand dort text per maus einfügen.

Entweder so, oder statt der TextBox ein NumericUpDown verwenden...
Zusätzlich kann man auch noch 
http://msdn.microsoft.com/en-us/library/system.win... 
einsetzen.

Autor: Christopher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder einfach die ReadOnly Eigenschaft auf True setzen;)

Autor: Stefan_KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich eine Zahl eingeben möchte, kann ich nicht die ReadOnly 
Eigenschaft auf True setzen.

Wie sieht die Syntax für ein onChange aus?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan_KM schrieb:
> Wie sieht die Syntax für ein onChange aus?

keine ahnung wie es im VS geht, aber normaler weise sieht man die events 
und macht dann dort ein doppelklick drauf und schon wird die methode 
angelegt.

Autor: Stefan_KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müßte das Event dann bei den Eigenschaften der TextBox zu finden sein?

Autor: gonzo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den Eigenschaften gibt es rechts oben so einen Blitz bei dem die 
Events angegeben sind.

Autor: Stefan_KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, bei VS C# gibt es anscheinend das Event onChange nicht.
Mist.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das glaube ich nun überhaupt nicht.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok es heist scheinbar nicht OnChange - aber es ist nicht allzuschwer zu 
erraten wie es richtig heist.

http://msdn.microsoft.com/en-us/library/system.win...

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du dir für zukünftige Anfragen merken kannst: Du brauchst keine 
Infos zu C# sondern Windows Forms. Das ist ein Unterschied der wichtig 
ist wenn sich aus der Frage nicht so leicht ersehen lässt um welches 
Framework es denn nun geht.

Autor: fz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

du kannst auch die TryParse Methode des Datentyps verwenden

fz

Autor: Stefan_KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich danke euch sehr für diese Tipps. Leider weiß ich trotzdem nicht wie 
meine Code aussehen muss.
Wenn ich beispielsweise bei der Eingabe in meine TextBox1 beim 
Tastendruck eines Buchstaben die Eingabe anfagneg will, wie muss die 
Syntax aussehen. Ich weiß das ich bei Doppelklich auf das Event meines 
Elements (TextBox1) doppelt klicke, dass dann eine Funktion angelegt 
wird. Dort kann ich die Eingabe eines Buchstaben abfangen.

Aber wie, ich weiß nicht was ich abfragen soll?

Autor: lmgtfy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach es doch einfach so:

Du nimmst das OnChangeEvent der textbox:
int old1 = 0; //alten Wert speichern
void textbox1_OnChange(object sender, Eventargs e)
{
try
{
   old1 = Convert.ToInt32(textBox1.Text);
}
catch(Exception{ textBox1.Text = old1.ToString(); }
}
//Ungetestet

Du konvertierst den Text in eine Zahl. Wenn das nicht geht wird eine 
Ausnahme ausgelöst und abgefangen, in der die alte Zahl in die TextBox 
geschrieben wird.

EDIT: Oder nimm die MaskedTextBox

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sry, es ist das TextChanged Event. Das ist das wenn du auf die TBox 
doppelt klickst.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles was bisher genannt wurde wär mir zu umständlich. Mit dem KeyUp 
oder KeyDown Event kann man prüfen welcher Key eingegeben wurde und auch 
verhindern das er in die Box geschrieben wird. Da vom Key-Wert 0-9 
hintereinander liegen geht sogar eine

if(Key >= 0 && Key <= 9)

Konstruktion

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> Alles was bisher genannt wurde wär mir zu umständlich. Mit dem KeyUp
> oder KeyDown Event kann man prüfen welcher Key eingegeben wurde und auch
> verhindern das er in die Box geschrieben wird.

nein kann man nicht, weil man auch text einfügen kann. z.b. mit der 
rechte maustaste. Dabei kommt kein KeyDown event!

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist das eigentlich für eine Diskussion? Am wenigsten Aufwand macht 
in jedem Fall die MaskedTextBox. Als Maske 0000, wenn man bis zu 4 
zeichen eingeben darf.

Nachteil ist, dass man dann solche Unterstriche in der TextBox hat.

Autor: Udo Schmitt (urschmitt)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Sorry aber...
früher haben wir noch programmiert...
heute hat man das Problem das richtige Drop down oder Pop Up Menü zu 
finden und sich dort mit dem richtigen Eintrag einen Methodenrumpf 
generiern zu lassen der dann noch nicht mal von alleine das tut was man 
will :-)
Kopfschüttel...
Trotzdem noch viel Spass :-)

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Udo Schmitt schrieb:
> Sorry aber...

Du wirst noch dankbar sein, sobald du einen komplexen Algorithmus 
programmierst (dann muss man sich nur um das eine Sorgen).

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autor: Samuel K. (sam1994)
                     ^^^^
Wenn das dein Baujahr ist, hast du in dieser Diskussion gnadenlos 
verspielt.

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hat das denn mit meinem Alter zu tun? Darf man ein eigenes 
Schachengine erst ab 40 programmieren? Das Alter hat damit doch 
überhaupt nichts zu tun. Glaubst du das Alter bestimmt die Wertigkeit 
von Beiträgen? Womit willst du das Begründen? Mit der Erfahrung? Dieser 
Thread war eine reine Wissenfrage!

Wenn ihr das Rad 2mal erfinden wollt, bitte schön. Aber wenn ihr dann 
noch eine Frage habt, leg ich euch eine Tabelle mit Assembler Befehlen 
hin, mit der ihr dann mal eure ZahlenTextBox schreiben könnt (geht dann 
leider nicht mehr in c#).

Ich glaube vc# hat seine umfangreiche ToolBox nicht zum anschauen.

Autor: Long (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
//bei button-click
try
{
int text = int.parse(textbox1.text);
}
catch
{
messagebox.show("Bitte nur Zahlen eingeben!");
textbox1.clear();
}

Autor: Jonas Biensack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
textbox.text = int.TryParse(textbox1.text);

Autor: Borislav Bertoldi (boris_b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum einfach, wenn's auch kompliziert geht? ;-)

Arc Net schrieb:
> Entweder so, oder statt der TextBox ein NumericUpDown verwenden...

Da hst du doch schon die Lösung gehabt...
Die TextBox ist nicht unbedingt für die Eingabe von Zahlen gedacht. Von 
daher beherzige doch bitte obigen Ratschlag und verwende ein 
Numeric-Control. Dann brauchst du dich auch nicht weiter um Code zur 
validierung kümmern...

Autor: weini (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wer hat das denn aus dem Grab geholt?

Jonas Biensack schrieb:
> textbox.text = int.TryParse(textbox1.text);

TryParse ist zwar an sich eine bessere Idee als try/catch mit Parse, 
aber so funktioniert es sicher nicht.

public static bool TryParse(string s, out int result)

Außerdem wollte der TO (vor ein paar Jahren ...) die Eingabe von Zahlen 
blockieren, nicht eine Messagebox anzeigen.

Bitte benutzt für so etwas ein passendes Control, ob nun von MS oder 
sonst jemandem; solche Anforderungen hatten schon ein paar 
(Fantastillionen) Leute vor euch. Es ist zwar keine Quantenmechanik, 
aber auch nicht ganz so trivial, wie es hier dargestellt wird. U.a. muss 
Copy & Paste korrekt behandelt werden.

Möge der Thread nun in Frieden ruhen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.