Forum: PC-Programmierung C# Eingabe von Buchstaben verhindern


von Stefan_KM (Gast)


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

von Peter (Gast)


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.

von Arc N. (arc)


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.windows.forms.control.validating.aspx 
einsetzen.

von Christopher (Gast)


Lesenswert?

oder einfach die ReadOnly Eigenschaft auf True setzen;)

von Stefan_KM (Gast)


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?

von Peter (Gast)


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.

von Stefan_KM (Gast)


Lesenswert?

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

von gonzo (Gast)


Lesenswert?

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

von Stefan_KM (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

das glaube ich nun überhaupt nicht.

von Peter (Gast)


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.windows.controls.textbox_events.aspx

von Martin (Gast)


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.

von fz (Gast)


Lesenswert?

Hallo,

du kannst auch die TryParse Methode des Datentyps verwenden

fz

von Stefan_KM (Gast)


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?

von lmgtfy (Gast)


Lesenswert?


von Sam .. (sam1994)


Lesenswert?

Mach es doch einfach so:

Du nimmst das OnChangeEvent der textbox:
1
int old1 = 0; //alten Wert speichern
2
void textbox1_OnChange(object sender, Eventargs e)
3
{
4
try
5
{
6
   old1 = Convert.ToInt32(textBox1.Text);
7
}
8
catch(Exception{ textBox1.Text = old1.ToString(); }
9
}
10
//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

von Sam .. (sam1994)


Lesenswert?

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

von Martin (Gast)


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

von Peter (Gast)


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!

von Sam .. (sam1994)


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.

von Udo S. (urschmitt)


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

von Sam .. (sam1994)


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

von Michael H. (michael_h45)


Lesenswert?

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

von Sam .. (sam1994)


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.

von Long (Gast)


Lesenswert?

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

von Jonas Biensack (Gast)


Lesenswert?

textbox.text = int.TryParse(textbox1.text);

von Borislav B. (boris_b)


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

von weini (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.