如何创建一个只接受数字的文本框和一个只接受WPF字母的文本框?

时间:2013-04-24 22:36:09

标签: c# wpf winforms xaml textbox

我想知道如何创建一个只允许用户输入数字的文本框,一个允许数字和一个完整停止的文本框,另一个只允许用户输入字母的文本框?

我将此代码用于Windows窗体:

private void YearText_KeyPress(object sender, KeyPressEventArgs e) //Textbox only accepts numbers
{
    char ch = e.KeyChar;
    if (!Char.IsDigit(ch) && ch != 8 && ch != 13)
    {
        e.Handled = true;
    }
}

private void NameText_KeyPress(object sender, KeyPressEventArgs e) //Textbox only accepts letters
{
    if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar))
        e.Handled = true;
}

private void ResellPriceText_KeyPress(object sender, KeyPressEventArgs e) //Textbox that allows only numbers and fullstops
{
    if (!char.IsControl(e.KeyChar)
        && !char.IsDigit(e.KeyChar)
        && e.KeyChar != '.')
    {
        e.Handled = true;
    }

    // only allow one decimal point
    if (e.KeyChar == '.'
        && (sender as TextBox).Text.IndexOf('.') > -1)
    {
        e.Handled = true;
    }
}

但我很快发现WPF无法做到这一点。我并不喜欢粘贴字母/数字的能力。

1 个答案:

答案 0 :(得分:3)

这可以在WPF中完成,事实上你甚至可以用非常相似的基于事件处理程序的代码来完成它,但是,不要这样 - 这是一个糟糕的用户体验。这样可以防止用户在意外包含周围空间时进行复制和粘贴,并防止输入科学数据,例如100e3。

而是使用验证(在修剪的输入上)并阻止用户在验证失败时继续。