Guten Morgen!
Ich würde gerne für eine TextBox festlegen dass man nur Zahlen eintragen kann, bisher hab ich einfach den TextChanged Event benutzt und dann alles was keine Zahl war sozusagen aus der TextBox rausgeschmissen, das dumme dabei ist nur dass dann z.B. wenn man einen Buchstaben eingibt dieser kurz aufblinkt und dann erst weg ist!
Kennt einer von euch ne bessere möglichkeit?
mfg Muphin
Hallo Muphin,
Kennt einer von euch ne bessere möglichkeit?
ich denke, das ist abgesehen vom Blinken die beste Möglichkeit. Siehe auch [FAQ] In einer TextBox nur bestimmte Zeichen/Eingaben zulassen
herbivore
schade, aber trotzdem Dankeschön für die wie immer Hilfreiche antwort 🙂
Moin
du kannst doch auch das KeyDown Event benutzen und gucken ob der Buchstabe eine Zahl ist. Ich glaube dann wird das Zeichen, wenn es keine Zahl ist, erst gar nicht in die TextBox geschrieben.
Original von ingo
du kannst doch auch das KeyDown Event benutzen und gucken ob der Buchstabe eine Zahl ist.
Copy & Paste?
Original von Noodles
Original von ingo
du kannst doch auch das KeyDown Event benutzen und gucken ob der Buchstabe eine Zahl ist.Copy & Paste?
ist doch auch nen keydown (mit mehreren tasten) 😉
oder nen mausdown mit contextmenü usw usw 8o 8o
ok spaß bei Seite.
ich hoffe die FAQ konnte weiterhelfen....
ohhh...
daran hab ich noch nie gedacht. Naja war dann doch nicht so eine gute Idee.
Danke für den Hinweis.
und was wäre wenn man mit dem KeyDown Event verhindert das unerwünschte Zeichen in die TextBox geschrieben werden aber auch noch mit dem TextChanged Event den string mit z.B. TryParse(oder so)vergleicht.
Das TextChanged Event muss ja auch vielleicht nur zum Einsatz kommen wenn KeyDown nicht ausgelöst wurde.
So hätte man doch copy&paste auch ausgeschlossen, oder nicht?
EDIT: und es würde trotzdem nicht blinken, halt nur bei copy&paste.
Also ich hab da jetzt nochmal rumprobiert weil mich das aufblinken der Buchstaben doch noch gestört hat, ich setz jetzt in der TextBox den Text auf "" wenn ein Key gedrückt wird der keine Zahl von 1-9 ist also so:
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyData != Keys.D1 && e.KeyData != Keys.D2 && e.KeyData != Keys.D3 && e.KeyData != Keys.D4 &&
e.KeyData != Keys.D5 && e.KeyData != Keys.D6 && e.KeyData != Keys.D7 && e.KeyData != Keys.D8 && e.KeyData != Keys.D9)
{
((TextBox)sender).Text = "";
}
}
aber der Buchstabe blinkt trotzdem noch auf, da er nach dem KeyDown Event noch in den TextChanged event geht!
Lässt sich das irgendwie verhindern dass der TextChanged Event aufgerufen wird wenn der KeyDown event feststellt dass keine Zahl gedrückt wurde?
Oder habt ihr vielleicht noch andere Lösungsvorschläge?
durch
((TextBox)sender).Text = "";
änderst du doch den Text, also wird wohl auch dadurch der TextChanged Event ausgelöst 🤔 🤔
andere frage:
kann man in deine Textbox nur eine Zahl eingeben?
weil mich als Benutzer würde es stören, wenn ich schon ein paar Zahlen getippt habe, dann aus Versehen auf nen Buchstaben komme und alle vorher getippten Zahlen weg sind. 8o
ja, schon klar, wenn der TextChanged Event dadurch ausgelöst wird is das auch nich schlimm, solang dann nich trotzdem der Buchstabe den ich davor gedrückt hab zu sehen wäre! Wenn ich den Text ändern könnte ohne dass der Changed Event ausgelöst wird wär das in dem Fall auch nich schlecht, aber da kenn ich jetzt auch noch keine möglichkeit!
In dem Feld steht nur eine Zahl, deshalb isses nich schlimm wenn alles weg is!
Hallo,
private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyData != Keys.D1 && e.KeyData != Keys.D2 && e.KeyData != Keys.D3 && e.KeyData != Keys.D4 &&
e.KeyData != Keys.D5 && e.KeyData != Keys.D6 && e.KeyData != Keys.D7 && e.KeyData != Keys.D8 && e.KeyData != Keys.D9)
{
e.Handled= true;
}
}
so müsste es gehen oder? Dann werden alle Eingabe die nicht zwischen 1 un 9 liegen erst gar nicht weiter behandelt.
ars3nic
so funktioniert es auch
//so wird z.B. das "a" nicht angezeigt
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 65)
e.SuppressKeyPress = true;
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!('0' <= e.KeyChar && e.KeyChar <= '9')) e.Handled = true;
}
So werden nur alle numerischen Eingaben akzeptiert.
@arsenic
Das hatte ich auch schon gedacht, aber funktioniert leider nicht, bei mir springt er da nach dem KeyDown Event in den TextChanged Event als ob nichts gewesen wäre!
@Ingo
Weißt du ob das SuppressKeyPress erst ab Framework 2 vorhanden is? Bei mir gibts das nämlich nich!
Original von Muphin
@arsenic
Das hatte ich auch schon gedacht, aber funktioniert leider nicht, bei mir springt er da nach dem KeyDown Event in den TextChanged Event als ob nichts gewesen wäre!
Hast du auch das zweite Beispiel von mir mal probiert mit dem KeyPress Event?
SuppressKeyPress
Hinweis: Diese Eigenschaft ist neu in .NET Framework, Version 2.0.
Ruft einen Wert ab, der angibt, ob das Key-Ereignis an das zugrunde liegende Steuerelement übergeben werden soll.
ja das gibt es erst ab 2.0
Original von arsenic
Original von Muphin
@arsenic
Das hatte ich auch schon gedacht, aber funktioniert leider nicht, bei mir springt er da nach dem KeyDown Event in den TextChanged Event als ob nichts gewesen wäre!Hast du auch das zweite Beispiel von mir mal probiert mit dem KeyPress Event?
Ja, habs grad reingetippt, und das funktioniert, jetzt würd ich nur mal gern wissen warum!
Weiß einer von euch wie das mit VS 2003 und dem Framework 2.0 is, bei mir ist das 2.0 nämlich doch installiert, hab grad nachgeschaut aber auf die Funktionen kann ich wohl nicht zugreifen!
Hallo Muphin
Original von Muphin
Weiß einer von euch wie das mit VS 2003 und dem Framework 2.0 is, bei mir ist das 2.0 nämlich doch installiert, hab grad nachgeschaut aber auf die Funktionen kann ich wohl nicht zugreifen!
Du kannst das FW 2.0 erst ab VS 2005 benutzen.
Oder du besorgst dir die VS Express Editions, die laufen auf 2.0.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Original von arsenic
Hallo,private void txtBox_KeyDown(object sender, KeyEventArgs e) { if(e.KeyData != Keys.D1 && e.KeyData != Keys.D2 && e.KeyData != Keys.D3 && e.KeyData != Keys.D4 && e.KeyData != Keys.D5 && e.KeyData != Keys.D6 && e.KeyData != Keys.D7 && e.KeyData != Keys.D8 && e.KeyData != Keys.D9) { e.Handled= true; } }
Hallo
also bei mir geht das nicht, wenn ich ein Buchstaben eingebe. Der wird trotzdem in die TextBox geschrieben. Das müsste doch mit e.handled = true nicht gemacht werden?
Grüsse
bei vcs 2005 kannst du einfach ne maskedtextbox nehmen
Original von Muphin
Weiß einer von euch wie das mit VS 2003 und dem Framework 2.0 is, bei mir ist das 2.0 nämlich doch installiert, hab grad nachgeschaut aber auf die Funktionen kann ich wohl nicht zugreifen!
Du kannst das FW 2.0 erst ab VS 2005 benutzen.
Oder du besorgst dir die VS Express Editions, die laufen auf 2.0.
Oder du holst dir SharpDevelop.
Oder du verwendest einfach das NumericUpDown-Control