代码:
复制代码 代码示例:
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;
}
}
复制以下代码到项目中,然后编译,从工具栏中拖出这个控件,就可以使用了。
代码:
复制代码 代码示例:
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+$"即可。
您可能感兴趣的文章:
TextBox限制只能输入数字的方法
c#判断输入内容是否数字的代码
如何让Asp.net TextBox控件只允许输入数字