我有一个 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/