Frage

Ich brauche eine Textbox, die nur der Benutzer erlauben kann, ganze Zahlen eingeben. Der Benutzer kann jedoch nicht Null eingeben. das heißt, er kann 10.100 etc. Nicht 0 alleine ein. Wie kann ich Ereignis in KeyDown machen?

War es hilfreich?

Lösung

Die Art und Weise Sie planen, dies zu tun, ist sehr ärgerlich für einen Benutzer. Sie raten, was ein Benutzer eingeben möchte, und wirken auf Ihre Vermutung, aber man kann so falsch sein.

Es hat auch Löcher, zum Beispiel kann ein Benutzer „10“ eingeben und dann löschen Sie die „1“. Oder er in einem „0“ einfügen könnte - Sie erlauben tun Paste, nicht wahr

Also meine Lösung wäre: Lassen Sie ihn jede Ziffer eingeben er mag, jede Art, wie er will, und die Eingabe bestätigen nur nach er fertig war, zum Beispiel, wenn der Eingang den Fokus verliert

Andere Tipps

Warum nicht mit einer NumericUpDown und nehmen Sie folgende Einstellungen vor:

upDown.Minimum = 1;
upDown.Maximum = Decimal.MaxValue;

Verwenden Sie int.TryParse die konvertieren Text in eine Zahl und prüfen, ob diese Zahl die Validieren Ereignis für den Scheck.

// 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, sollten Sie einen Blick darauf werfen, wie Validierung zur Umsetzung der WPF Weg . Hier ist eine Validierung Klasse, die die obige 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);
    }
}

Dies ist eine weitere Variation des Themas:

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;
}
    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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top