Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中创建一个只接受数字的文本框和一个只接受字母的文本框?_C#_Wpf_Winforms_Xaml_Textbox - Fatal编程技术网

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

C# 如何在WPF中创建一个只接受数字的文本框和一个只接受字母的文本框?,c#,wpf,winforms,xaml,textbox,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

我只是想知道如何创建一个文本框,只允许用户键入数字,一个允许数字和句号,一个只允许用户键入字母

我将此代码用于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来完成。我对粘贴字母/数字等功能并不在意。

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


相反,使用验证(对修剪后的输入),并防止用户在验证失败时继续操作。

我支持事后验证的想法。我从未发现有必要限制可以输入的内容,只限制可以提交的内容。输入只有a-f和0-9的MAC地址非常有用。允许输入MAC地址时字符超出范围,并使输入无效对我来说似乎很麻烦。所以我想这取决于用例。