Asp.net 只能输入数字的文本框 .

 

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);
    }
}

你可能感兴趣的:(Asp.net 只能输入数字的文本框 .)