作者:兔子党逍遥
转自:http://blog.csdn.net/wuyazhe/article/details/5729338
- 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+$"就可以了。