Can';t在c#wpf中用一个逗号或点创建一个数字文本框

Can';t在c#wpf中用一个逗号或点创建一个数字文本框,c#,wpf,C#,Wpf,我正在制作一个关于WPF中财务管理的程序,我需要像标题中描述的那样的文本框 在你称之为复制品之前,我在多个网站上搜索过,所有建议的解决方案都只适用于数字,但他们似乎无法识别我的点键或逗号键(我使用拉丁美洲qwerty键盘),我不知道我尝试的解决方案是特定于地区的(因为键盘),还是我的代码中的某个内容 到目前为止,我已经尝试: 与前面相同,但手动将e.KeyChar与Convert.ToChar(“.”)进行比较 使用KeyDown事件和多个if(e.Key==Key.DX)(这适用于点,但不适

我正在制作一个关于WPF中财务管理的程序,我需要像标题中描述的那样的文本框

在你称之为复制品之前,我在多个网站上搜索过,所有建议的解决方案都只适用于数字,但他们似乎无法识别我的点键或逗号键(我使用拉丁美洲qwerty键盘),我不知道我尝试的解决方案是特定于地区的(因为键盘),还是我的代码中的某个内容

到目前为止,我已经尝试:

与前面相同,但手动将e.KeyChar与Convert.ToChar(“.”)进行比较

使用KeyDown事件和多个if(e.Key==Key.DX)(这适用于点,但不适用于数字,我尝试了D0-D9键和OEM键)

这些似乎都不适合我,因为我需要用数字做数学运算,因为它们的用途,我需要它们有小数点(或逗号)


感谢您提供的任何帮助或想法。

您可以使用允许任何字符的标准文本框,然后在KeyDown或TextChanged上使用事件处理程序来检查文本中的非法字符(数字、逗号或句点除外)。它看起来像这样:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    string result = "";
    char[] validChars = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '.' }; // these are ok
    foreach (char c in textBox1.Text) // check each character in the user's input
    {
        if (Array.IndexOf(validChars, c) != -1)
            result += c; // if this is ok, then add it to the result
    }

    textBox1.Text = result; // change the text to the "clean" version where illegal chars have been removed.
}

根据你发布的链接,我为你修改了它

    private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
    {
        var ue = e.Source as TextBox;
        Regex regex;
        if (ue.Text.Contains("."))
        {
            regex = new Regex("[^0-9]+");
        }
        else
        {
            regex = new Regex("[^0-9.]+");
        }

        e.Handled = regex.IsMatch(e.Text);
    }

哇,我觉得这个方法比我在网上看到的更简单!谢谢这工作做得很好!使用正则表达式也适用于同样的事情,但由于选择的数量非常有限,这很好。@ElementalPete,那么无效的数字格式呢?像
127.0.0.1
?所有的角色都是valid@ASh我使用它的条件是,它检查文本框中是否已经存在点或逗号,并根据代码是否使用了不包含点或逗号的不同有效字符集comma@ASh-说到你的观点,当文本框失去焦点或在执行计算或提交数据之前,需要进一步验证。但另一方面,1000美元怎么样?这个数字是完全有效的,如果你在TextChanged上强制执行任何高级逻辑,你就无法输入它(因为首先你必须点击“1”,它不会以一个点和两个数字结束,等等)。我的方法应该给用户提供快速反馈,以获得良好的可用性(即不允许使用美元符号),但在你看来,这并不是一个完整的验证方案。你说的“拉丁美洲”是什么意思?键盘布局的名称是什么?某些布局更改数字键盘的
键的含义,以输入区域性的小数分隔符。您使用的布局是否与键盘不匹配?例如,英国的布局开关
@
,因此使用在英国境外购买的键盘会导致问题。但这不是软件问题