我知道这个问题已被问到,但我的代码中还有另一个问题:
(e.Key >= Windows.System.VirtualKey.Number0) &&
(e.Key <= Windows.System.VirtualKey.Number9)
它可以正常工作,但是当我输入Shift+6
时,它会输入&
代码在按住按键时不起作用,但在按下6之后它会起作用并输入&
。
如何禁用此功能?我正在考虑一个保持前一个键的全局变量,如果它的移位没有键入,但它也保持移位,同时没有用数字键按下shift或者在数字键之前预先移位。
答案 0 :(得分:1)
为什么不TryParse
编入文本并查看是否int
而不是验证密钥。
如果您希望保留当前的实施,那么还要检查Modifier
密钥,以避免Shift+6
等情况。
答案 1 :(得分:1)
您也可以检查Shift
:Keyboard.Modifiers == ModifierKeys.Shift
等特殊键。
http://msdn.microsoft.com/en-us/library/system.windows.input.modifierkeys.aspx
答案 2 :(得分:0)
如果你设置
,你应该在任何其他textchanged或任何其他键事件之前使用 PreviewTextInput .it引发接下来你尝试将e.text(这是新的文本框值)解析为int,如果它的true(文本是int)e.handeled = False所以textchanged,.. continue,否则e.Handeled =真的发生了什么
注意强> 在预览事件上,文本框尚未更改,因此您从e.Text
中检索其值 TextBox mytextblock= new TextBox();
mytextblock.PreviewTextInput += mytextblock_PreviewTextInput;
内
void mytextblock_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
int val;
e.Handled = !int.TryParse(e.Text, out val);
};
答案 3 :(得分:0)
最好使用Regex检查用户是否输入了一个数字,因为用户也可以粘贴一个也有效的值。
如果您需要匹配多个数字,请使用“^ \ d + $”。
请注意,“\ d”将匹配[0-9]和其他数字字符,如东方阿拉伯数字0123456789。使用“^ [0-9] + $”将匹配仅限制为阿拉伯数字0 - 9.
您应该检查私人成员保留文本框中的有效值,并且每次更改文本框值时,您必须检查值是否有效,如果有效,则私有成员= textbox.value,否则textbox.value =私有成员,在这种情况下,您的用户将无法输入无效值