c# 只能输入数字的文本框

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !(Char.IsNumber(e.KeyChar) || e.KeyChar == (char)8 || e.KeyChar == '.'); if (!e.Handled) (sender as TextBox).Tag = (sender as TextBox).Text;//记录最后一次正确输入 } private void textBox1_TextChanged(object sender, EventArgs e) { if (!System.Text.RegularExpressions.Regex.IsMatch((sender as TextBox).Text, @"^(?!0/d)/d+(/./d*)?$")) { int index = (sender as TextBox).SelectionStart; (sender as TextBox).Text = (sender as TextBox).Tag as string; (sender as TextBox).SelectionStart = index; } }

 

好奇而已,别人发的问题。回复一下。觉得这样写比较简练。发到博客上,方便查找。

 

------------------------------------------------

2010-11-05修改一下

复制如下代码到你项目中。编译,从工具栏中拖出这个控件即可。

 public class NumbericTextbox : TextBox { protected override void OnKeyPress(KeyPressEventArgs e) { e.Handled = !(Char.IsNumber(e.KeyChar) || e.KeyChar == (char)8 || e.KeyChar == '.'); if (!e.Handled) this.Tag = this.Text;//记录最后一次正确输入 base.OnKeyPress(e); } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); if (!System.Text.RegularExpressions.Regex.IsMatch((this).Text, @"^(?!0/d)/d+(/./d*)?$|")) { int index = (this).SelectionStart; (this).Text = (this).Tag as string; (this).SelectionStart = index; } } public const int WM_PASTE = 0x302; protected override void WndProc(ref Message m) { if (m.Msg == WM_PASTE)//粘贴 { if (!Regex.IsMatch(Clipboard.GetText(), @"^(?!0/d)/d+(/./d*)?$|")) return; } base.WndProc(ref m); } }

 

如果不限制是数值,只是要求数字序列,把代码中的正则都换为:@"^/d+$"就可以了。

你可能感兴趣的:(object,String,C#,Class,工具,textbox)