我正在使用正则表达式以仅在文本框中输入数字,并尝试删除插入的任何非数字
private void txtNex_TextChanged(object sender, EventArgs e)
{
if (System.Text.RegularExpressions.Regex.IsMatch(txtNex.Text, "[^0-9]"))
{
MessageBox.Show("insert numbers only");
if (txtNex.Text.Length > 1)
{
txtNex.Text = txtNex.Text.Substring(0, txtNex.Text.Length - 1);
}
else
{
txtNexFixPhone.Text = "0";
}
}
}
问题是当它确实起作用时,存在某种错误(或我自己的知识不足),该错误将输入移至开头,如果我输入另一个非数字值,则会形成一个循环,从而删除所有文本
所以说我进入
123a
如果我尝试输入另一个“ a”,它将给我和错误消息框并删除“ a”,它将出现在123之前
a123
以错误循环结束,该错误循环将删除所有输入
一个方法是一个坏主意,因为您检查了TextChanged
已经太迟的输入-那里有无效字符,现在您必须删除它-最好这样做KeyPress
并完全阻止输入,这样您就不必这样做了。完全不必操纵文本:
例子:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar))
{
MessageBox.Show("insert numbers only");
e.Handled = true;
}
}
但是,如果要修复将输入移至开头并保持当前解决方案的错误,则在操作文本后需要将光标放在末尾,因为在文本框中设置新文本会重置光标的位置。
例子:
// Manipulate the text:
txtNex.Text = txtNex.Text.Substring(0, txtNex.Text.Length - 1);
// Put the cursor at the end:
txtNex.Select(txtNex.Text.Length, 0);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句