dae*_*ngl 5 c# events textbox uwp
我正在创建一个UWP应用程序,它具有不同的TextBoxes来输入数字.为确保只能输入数字,我使用TextChanging事件.遗憾的是,我找不到任何关于如何使用TextChanging来忽略错误输入的文档.
一个TextBox的工作解决方案如下:
string oldText;
private void tbInput_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
double temp;
if (double.TryParse(sender.Text, out temp) || sender.Text == "")
oldText = sender.Text;
else
{
int pos = sender.SelectionStart - 1;
sender.Text = oldText;
sender.SelectionStart = pos;
}
}
Run Code Online (Sandbox Code Playgroud)
使用这个解决方案,我需要string oldText为每个TextBox和一个TextChanging函数或每个函数内的更多代码.
是否有一种简单的方法可以忽略TextBox.TextChanging事件中的"错误"输入?
在Romasz链接的第一个评论的帮助下,我提出了这个解决方案:
private void tbInput_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
double dtemp;
if (!double.TryParse(sender.Text, out dtemp) && sender.Text != "")
{
int pos = sender.SelectionStart - 1;
sender.Text = sender.Text.Remove(pos, 1);
sender.SelectionStart = pos;
}
}
Run Code Online (Sandbox Code Playgroud)
除非选择了输入值的一部分然后输入了错误的字符,否则此操作非常正常.
编辑:我改进了以上版本以使用正则表达式.所以现在我可以检查应该允许输入的内容:
private void tbInput_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
if (!Regex.IsMatch(sender.Text, "^\\d*\\.?\\d*$") && sender.Text != "")
{
int pos = sender.SelectionStart - 1;
sender.Text = sender.Text.Remove(pos, 1);
sender.SelectionStart = pos;
}
}
Run Code Online (Sandbox Code Playgroud)