Ich brauche ein Textfeld, das nur der Benutzer zulassen kann, Ganzzahlen einzugeben. Der Benutzer kann jedoch keine Null eingeben. d. h. er kann 10,100 usw. eingeben. Nicht 0 allein. Wie kann ich ein Ereignis in KeyDown machen?Keine Null in Textfeld zulassen
Antwort
Die Art, wie Sie dies tun, ist für einen Benutzer sehr ärgerlich. Sie raten, was ein Benutzer eingeben möchte, und handeln nach Ihrer Vermutung, aber Sie können so falsch liegen.
Es hat auch Löcher, zum Beispiel kann ein Benutzer "10" eingeben und dann die "1" löschen. Oder er könnte eine "0" einfügen - du erlaubst doch Paste, oder?
Also meine Lösung wäre: Lassen Sie ihn jede beliebige Ziffer eingeben, die er mag, wie er will, und validieren Sie die Eingabe nur nach er beendet, zum Beispiel, wenn der Eingang den Fokus verliert.
Verwenden Sie int.TryParse, um den Text in eine Zahl zu konvertieren und zu überprüfen, ob diese Zahl nicht 0 ist. Verwenden Sie das Ereignis Validating für die Überprüfung.
// this goes to you init routine
textBox1.Validating += textBox1_Validating;
// the validation method
private void textBox1_Validating(object sender, CancelEventArgs e)
{
if (textBox1.Text.Length > 0)
{
int result;
if (int.TryParse(textBox1.Text, out result))
{
// number is 0?
e.Cancel = result == 0;
}
else
{
// not a number at all
e.Cancel = true;
}
}
}
EDIT:
Okay, da Sie WPF verwenden Sie einen Blick darauf, wie validation the WPF way zu implementieren nehmen sollte. Hier ist eine Validierung Klasse, die die obigen Logik implementiert:
public class StringNotZeroRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (textBox1.Text.Length == 0)
return new ValidationResult(true, null);
int result;
if (int.TryParse(textBox1.Text, out result))
{
// number is 0?
if (result == 0)
{
return new ValidationResult(false, "0 is not allowed");
}
}
else
{
// not a number at all
return new ValidationResult(false, "not a number");
}
return new ValidationResult(true, null);
}
}
Mein Fall ist in WPF. – Sauron
Warum nicht ein NumericUpDown und nehmen Sie folgende Einstellungen:
upDown.Minimum = 1;
upDown.Maximum = Decimal.MaxValue;
Ich glaube nicht, dass WPF ein NumericUpDown-Steuerelement hat. –
Ich habe bis heute nicht mit WPF gearbeitet und ich habe dieses Tag in seiner Frage nicht gesehen. In diesem Fall würde ich alle nicht-numerischen Eingaben in dem Schlüssel-Abwärts-Ereignis aussortieren und in OnValidating auf Null prüfen (wie bereits von Bart erwähnt) – Oliver
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (textBox1.Text == "" && e.KeyChar == '0')
{
e.Handled = true;
return;
}
if (e.KeyChar < '0' || e.KeyChar > '9')
{
e.Handled = true;
return;
}
}
nicht schön, aber es funktioniert
Dies ist eine weitere Variation zum Thema:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
char newChar = Convert.ToChar(e.KeyValue);
if (char.IsControl(newChar))
{
return;
}
int value;
e.SuppressKeyPress = int.TryParse((sender as TextBox).Text + newChar.ToString(), out value) ? value == 0 : true;
}
KeyValue & SuppressKeyPress bekommt Fehler in WPF – Sauron
Ah, verpasste das Wpf-Tag, meine schlechte. –
- 1. Nur numerische Eingabe in WPF zulassen Textfeld
- 2. Nur numerische Werte in das Textfeld zulassen
- 3. Nur zwei Nachkommastellen in Textfeld zulassen?
- 4. Textfeld sollte nur Hexa Dezimalwerte zulassen
- 5. Symfony2-Validierer, NotBlank, aber Null zulassen
- 6. Wie kann ich Tabulatorzeichen in einem Textfeld in Flash zulassen?
- 7. überprüfen Textfeld auf Null
- 8. Modify-Tabelle: Wie ändert man das Attribut 'Nullen zulassen' von nicht null auf null zulassen
- 9. Azure Storage - Hochladen zulassen, aber keine Aktualisierung zulassen
- 10. Wie kann ich nur eine Dezimalstelle in einem Textfeld zulassen?
- 11. DB2: Wird die Spalte "NULL" nicht zulassen?
- 12. Jquery-Validierung - Nummer ohne führende Null zulassen?
- 13. Nur numerischen Text bei der Eingabe zulassen Textfeld
- 14. DatagridTextColumn mit Dezimalwert, keine Eingabe zulassen
- 15. keine Zugriffskontrolle zulassen Ursprungsfehler auf 2 Subdomains
- 16. HTML5 Geolocation in Facebook-App-Browser - keine zulassen/blockieren Eingabeaufforderung
- 17. PHP - wie man nur Buchstaben in einem Textfeld erlaubt. Wie kann ich nur Zahlen in einem Textfeld zulassen?
- 18. Textfeld Wert werden keine negativen Werte
- 19. Wie behandelt NULL für ein Datetime-Feld (DB) mit Zulassen-Null in unserem Programm?
- 20. Warum Java nicht null zulassen, während primitive Datentypen deklarieren
- 21. Java-Bukkit-Konfigurationsdatei für Spielerhäuser, die keine Teleportation zulassen
- 22. Keine Null vor Komma
- 23. Django: Keine Null-Bedingung, obwohl null = True?
- 24. Regex zum Validieren von US-Staaten, die Namen und ihre Abkürzungen zulassen und keine Nummern zulassen
- 25. SSIS-Skriptkomponente, Nullwerte zulassen
- 26. HTML in Textfeldern zulassen
- 27. HTML-Tags in einem Postback zulassen
- 28. SSRS zeigen die Null nach einer Dezimalstelle in Textfeld
- 29. Winkelbeschränkung, um keine Leerzeichen im Textfeld zuzulassen
- 30. MPMoviePlayerController, Vollbild nicht zulassen, aber Navigation durch Clip zulassen?
Ich denke, dass Ihre Tagging der Frage verwirrend ist, weil Sie WinForms haben, aber eine WPF-Antwort benötigen. – benPearce