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+$"就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值