文本框中不允许为零

时间:2009-05-13 06:03:23

标签: c# wpf forms input-filtering

我需要一个只有用户可以输入整数的文本框。但是用户不能输入零​​。即,他可以输入10,100等。不仅仅是0。 如何在KeyDown中创建活动?

5 个答案:

答案 0 :(得分:9)

您计划这样做的方式对用户来说非常烦人。你猜测用户想要输入什么,并按照你的猜测行事,但你可能会错。

它也有漏洞,例如,用户可以输入“10”然后删除“1”。或者他可以粘贴“0” - 你允许粘贴,不是吗?

所以我的解决方案是:让他输入他喜欢的任何数字,他喜欢的任何方式,并在完成之后仅验证输入,例如,当输入失去焦点时。

答案 1 :(得分:6)

为什么不使用NumericUpDown并进行以下设置:

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

答案 2 :(得分:3)

使用int.TryParse将文本转换为数字并检查该数字是否为0.使用Validating事件进行检查。

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

修改

好的,既然你使用WPF,你应该看一下如何实现validation the WPF way。这是一个实现上述逻辑的验证类:

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

答案 3 :(得分:1)

这是主题的另一个变体:

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

答案 4 :(得分:0)

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

    }

不好但是有效