C# 如何从wpf文本框中的十进制数中删除无效项
在WPF中,我希望允许文本框只接受小数点后最多2位的小数点数字。例如,330.33有效,333.333无效。文本框应限制所有其他特殊字符。我创建了两个函数,一个用于返回无效字符串,另一个用于将字符串与用户按下的字符进行比较,如果字符串包含无效字符,则删除该字符。我认为这种硬编码字符串中无效字符并将其与无效键笔划进行比较的方法是不正确的。有没有更好的办法C# 如何从wpf文本框中的十进制数中删除无效项,c#,wpf,C#,Wpf,在WPF中,我希望允许文本框只接受小数点后最多2位的小数点数字。例如,330.33有效,333.333无效。文本框应限制所有其他特殊字符。我创建了两个函数,一个用于返回无效字符串,另一个用于将字符串与用户按下的字符进行比较,如果字符串包含无效字符,则删除该字符。我认为这种硬编码字符串中无效字符并将其与无效键笔划进行比较的方法是不正确的。有没有更好的办法 private string GetInvalidstring() { string invalidCharact
private string GetInvalidstring()
{
string invalidCharacterString = @" ! "" # $ % & ' ( ) * + , - / : ; < = > ? @ A B C D \ | _ ~ ^";
invalidCharacterString += @" E F G H I J K L M N O P Q R S T U V W X Y Z ";
return invalidCharacterString;
}
private string CheckValidEntry(string input)
{
string invalidCharacters = GetInvalidstring();
char[] tocheck = input.ToCharArray();
string copy = input;
foreach (char c in tocheck )
{
if (invalidCharacters.Contains(c))
{
// int i = input.IndexOf(c);
copy = input.Replace(c, ' ');
}
}
return new string(copy.ToList().Where(c => c != ' ' ).ToArray());
}
私有字符串GetInvalidstring()
{
字符串invalidCharacterString=@“!”#$%&'()*+,-/:;<=>?@A B C D\| ~ ^”;
invalidCharacterString+=@“E F G H I K L M N O P Q R S T U V W X Y Z”;
返回invalidCharacterString;
}
私有字符串CheckValidEntry(字符串输入)
{
字符串invalidCharacters=GetInvalidstring();
char[]tocheck=input.ToCharArray();
字符串复制=输入;
foreach(tocheck中的字符c)
{
if(invalidCharacters.Contains(c))
{
//int i=输入。IndexOf(c);
复制=输入。替换(c.);
}
}
返回新字符串(copy.ToList().Where(c=>c!='').ToArray();
}
您可以使用此正则表达式只允许小数点后两位
^(\d+)?+([\.]{1})?+([\d]{1,2})?$
另请看一看您可以使用此正则表达式只允许小数位数达到小数点后两位
^(\d+)?+([\.]{1})?+([\d]{1,2})?$
另请看一下使用Math.Round()函数:
Math.Round(value, 2);
如果值为=333.333333,则Math.Round(值,2)返回333.33使用Math.Round()函数:
Math.Round(value, 2);
如果值为=333.333333,则Math.Round(值,2)返回333.33您可以执行以下操作:
private bool IsValid(string input)
{
decimal temp;
return decimal.TryParse(input,out temp) && Math.Round(temp,2)==temp;
}
您可以这样做:
private bool IsValid(string input)
{
decimal temp;
return decimal.TryParse(input,out temp) && Math.Round(temp,2)==temp;
}
查看
decimal.TryParse()
这可以通过使用正则表达式作为文本框的过滤器来实现,这样可以防止输入无效字符。参见:Op比Triparse有更多的stric条件。你认为“333.333”不会被解析吗?有一些使用,
作为十进制标记而不是
。不要盲目地认为每个人都使用
,或者,比如说,当一个德国用户不能使用您的文本框时,他们会非常不高兴。谢谢您提供的信息。我们正在开发的应用程序是wpf,只供特定客户使用。他们只使用。用于十进制标记。在开发基于web的解决方案时,您的观点将很有帮助。查看decimal.TryParse()
这可以通过使用正则表达式作为文本框的过滤器来实现,这样可以防止输入无效字符。参见:Op比Triparse有更多的stric条件。你认为“333.333”不会被解析吗?有一些使用,
作为十进制标记而不是
。不要盲目地认为每个人都使用
,或者,比如说,当一个德国用户不能使用您的文本框时,他们会非常不高兴。谢谢您提供的信息。我们正在开发的应用程序是wpf,只供特定客户使用。他们只使用。用于十进制标记。在开发基于web的解决方案时,您的观点将很有帮助。感谢您研究我的问题。我希望该功能能够在文本框失去焦点后自动查找并删除用户输入的无效字符,或防止用户在文本框中键入无效字符。感谢您调查我的问题。我希望该功能能够在文本框失去焦点后自动查找并删除用户输入的无效字符,或防止用户在文本框中键入无效字符。谢谢您提供的信息。你链接中的代码限制文本框允许小数点最多两位,这对我来说很有效。谢谢你提供的信息。链接中的代码限制文本框允许小数点最多两位,这对我来说很有用。