c# - 在 PreviewTextInput 解析数字

标签 c# parsing numbers

我有一个 WPF 应用程序,其中在 PreviewTextInput 上有一个钩子(Hook),通过它我可以获得当前输入的字符并且已经输入了字符串。鉴于此,我需要编写以下函数:

bool ShouldAccept(char newChar,string existingText)

existingText 可以是逗号分隔的有效数字(包括指数),并且当按下无效字符时它应该返回 false。

我的代码(如果基于 else)目前有很多缺陷,我想知道是否有任何聪明的方法可以做到这一点。

最佳答案

我建议分两次进行此操作:

首次检查:查找新字符是否有效。您可能应该只接受数字、逗号、点、+- 标记和字母 e。每个其他字符都应该导致它返回 false

第二次检查:将新字符附加到字符串,并使用 split method 将其以逗号分隔。并为每个单独的字符串执行 TryParse float/double 的方法。您可能应该以不同的方式对待分割元素中的最后一个字符串,因为输入可能仍在进行中(即以点结尾的字符串可能不会被解析。

请记住,您需要“告诉”解析器,允许点和其他字符以及应如何处理它们。对我来说,以下设置工作正常:

System.Globalization.CultureInfo info = new System.Globalization.CultureInfo("en-GB");
System.Globalization.NumberStyles styl = System.Globalization.NumberStyles.AllowDecimalPoint;
double.TryParse(someString, styl, info, out number);`

还有一件事:如果可以的话,将分隔标记从逗号更改为分号。在某些文化中,逗号用于表示小数点。

关于c# - 在 PreviewTextInput 解析数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997241/

相关文章:

c# - 使用文件 'key.pfx' 中的公钥对输出进行签名时出错——值不在预期范围内

javascript - parseFloat() 没有解析我的数组中的所有字符串。 JavaScript

python - 对列表中的连续数字求和。 Python

javascript - 如何正确排序整数数组

coldfusion - Coldfusion 中使用 PrecisionEvaluate 的科学记数法

c# - 使用分部类实现分层接口(interface)以提高可读性

c# - 我可以使用 JS 检索客户端的内部 IP 地址吗?

C# 从文件中读取 JPEG 并存储为图像

php - 将php中的配置文件解析为变量

swift - Xcode 7 中缺少 libsqlite3.dylib 和 libz.dylib。如何使用 Parse?