尝试这个:
Regex reg = new Regex(@"^-?\d+[.]?\d*$");
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsControl(e.KeyChar)) return;
if (!reg.IsMatch(textBox1.Text.Insert(textBox1.SelectionStart, e.KeyChar.ToString()) + "1")) e.Handled = true;
}
对于keyboardP的建议,我添加了这段代码以完全防止非数字值,我认为您应该尝试TextBox.ShortcutsEnabled = false;.因为我认为用户不需要任何形式的复制和粘贴数字数据.
Regex reg = new Regex(@"^-?\d+[.]?\d*$");
bool textChangedByKey;
string lastText;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsControl(e.KeyChar)) return;
if (!reg.IsMatch(textBox1.Text.Insert(textBox1.SelectionStart, e.KeyChar.ToString()) + "1"))
{
e.Handled = true;
return;
}
textChangedByKey = true;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (!textChangedByKey)
{
if (!reg.IsMatch(textBox1.Text))
{
textBox1.Text = lastText;
return;
}
}
else textChangedByKey = false;
lastText = textBox1.Text;
}
我尝试过使用Undo()方法和一些重设SelectedText的方法,但是这样做有些不好,即使上面的方法也没有带来很好的视觉效果(尝试将文本粘贴到文本中时,您可以看到文本发生了变化并恢复为有效值)数字文本框).