怎样限定TextBox只能输入数字?

解决方案 »

  1.   

    有一个掩码TextBox控件,使用这个就很容易设定
      

  2.   

    或者你重载TextBox控件,然后使用正则表达式判断,如果不是数字就不让输入
      

  3.   

    当TextBox1失去焦点时,将textBox1.text中所有字符依次判断一下是不是都是数字即可.
    这样可以防止有复制->粘贴过来的非数字.
      

  4.   


    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = !char.IsDigit(e.KeyChar);

      

  5.   

    string str="^[0-9]$";
    System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(str);
    if(r.IsMatch(this.TextBox1.Text))
    {
    ..匹配
    }
    else
    {
    不匹配
    }
      

  6.   

    KeyPress里面,
    设置KeyPressEventArgs的ASCII的范围
      

  7.   

    http://topic.csdn.net/t/20050627/15/4107739.html
      

  8.   

      System.Text.RegularExpressions.Regex re;
               re = New Regex("^[0-9]$");
               if (!re.IsMatch(TextBox.text))
               {
                 Messagebox.Show("只能输入数字!");
               }
      

  9.   

    onkeyup="if (event.keyCode!=46 && (event.keyCode<48 || event.keyCode>57)) event.returnValue=false;"这个放在你的textbox源代码里。加小数的。如果不要就把event.keyCode!=46 去掉
      

  10.   

    onkeyup="value=value.replace(/[^\d]/g,'')"在textbox里加上。
      

  11.   


    只能输入数字,Backspace键按不了,要用<-键移动然后按delete删除,感觉这样不理想(个人看法)
      

  12.   

    function OnKeyDown()
    {
    if ( (event.keyCode ==8 || event.keyCode == 46) || 
    (event.keyCode >=48 && event.keyCode <=57) || 
    (event.keyCode >=96 && event.keyCode <=105) )
    {        
    event.returnValue = true;
    return true;
    }
    else 
    {
    event.returnValue = false;
    return false;
    }
    }
    在TextBox里面添加onkeyup="OnKeyDown();"
      

  13.   


    怎样再 TextBox里面添加 onkeyup?
      

  14.   

     [转帖]禁止C#中的TextBox中输入非数字  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == 0x20)
                {
                    e.KeyChar = (char)0;
                }//禁止空格键
                if ((e.KeyChar == 0x2D) && (((TextBox)sender).Text.Length == 0))
                {
                    //  return;
                    e.KeyChar = (char)0;
                }//处理负数,禁止输入负数,如果想要输入负数,可以去掉  e.KeyChar = (char)0;用return;
                if (e.KeyChar > 0x20)
                {
                    try
                    {
                        double.Parse(((TextBox)sender).Text + e.KeyChar.ToString());
                    }
                    catch
                    {
                        e.KeyChar = (char)0;   //处理非法字符
                    }
                }        }
      

  15.   

    当界面上要用户输入只有数字的字符时,默认的Textbox是不能胜任的,网上有很多网友们提供了很多的做法,我总结了一下写了一个在C#下的实现,做到了如下的几点:
      1:只能输入类似这样的字符:-123456.789;1234.789;
      2:在输入的字符串中不能存在两个点符:12456.78//正确;12.456.78//不正确;
      3:如果表示负数可以在字符串的最前面加一个减号“-”,也只能加到弟一个字符的位置;
      4:可以用复制粘帖功能和菜单功能,但是只对能正确格式的字符串有效,比如:12.34可以,Abc不可以;
      5:只是得到一个字符串,还可以在这个基础上再改进自己所需的,经如添加对十六进制的支持等。
      代码如下在.NET下用C#写的:
      using System;
      using System.Windows.Forms;
      namespace NumTextBox
      {
      /// <summary>
      /// NumTextBox 的摘要说明。
      /// </summary>
      public class TextBoxNumEx:System.Windows.Forms.TextBox
      {
       public const int WM_CONTEXTMENU = 0x007b;//右键菜单消息 
       public const int WM_CHAR = 0x0102; //输入字符消息(键盘输入的,输入法输入的好像不是这个消息)
       public const int WM_CUT = 0x0300; //程序发送此消息给一个编辑框或combobox来删除当前选择的文本
       public const int WM_COPY = 0x0301; //程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板
       public const int WM_PASTE = 0x0302; //程序发送此消息给editcontrol或combobox从剪贴板中得到数据
       public const int WM_CLEAR = 0x0303; //程序发送此消息给editcontrol或combobox清除当前选择的内容;
       public const int WM_UNDO = 0x0304; //程序发送此消息给editcontrol或combobox撤消最后一次操作
       public TextBoxNumEx()
       {
       //
       // TODO: 在此处添加构造函数逻辑
       //
       }
       protected override void WndProc(ref Message m) 
       { 
       switch(m.Msg)
       { 
       case WM_CHAR:
       System.Console.WriteLine(m.WParam);
       bool isSign = ((int)m.WParam == 45);
       bool isNum = ((int)m.WParam >= 48) && ((int)m.WParam <= 57);
       bool isBack = (int)m.WParam == (int)Keys.Back;
       bool isDelete = (int)m.WParam == (int)Keys.Delete;//实际上这是一个"."键
       bool isCtr = ((int)m.WParam == 24) || ((int)m.WParam == 22) || ((int)m.WParam == 26) ||((int)m.WParam == 3);
       if( isNum || isBack || isCtr)
       {
       base.WndProc (ref m);
       }
       if (isSign)
       {
       if (this.SelectionStart!=0)
       {
       break;
       }
       base.WndProc (ref m);
       break;
       }
       if (isDelete)
       {
       if (this.Text.IndexOf(".")<0)
       {
       base.WndProc (ref m);
       }
       }
       if ((int)m.WParam == 1)
       {
       this.SelectAll();
       }
       break;
       case WM_PASTE:
       IDataObject iData = Clipboard.GetDataObject();//取剪贴板对象
       
       if(iData.GetDataPresent(DataFormats.Text)) //判断是否是Text
       {
       string str = (string)iData.GetData(DataFormats.Text);//取数据
       if (MatchNumber(str)) 
       {
       base.WndProc (ref m);
       break;
       }
       }
       m.Result = (IntPtr)0;//不可以粘贴
       break;
       default:
       base.WndProc (ref m);
       break;
       }
       }
       private bool MatchNumber(string ClipboardText)
       {
       int index=0;
       string strNum = "-0.123456789";
       index = ClipboardText.IndexOf(strNum[0]);
       if (index>=0)
       {
       if (index>0)
       {
       return false;
       }
       index = this.SelectionStart;
       if (index>0)
       {
       return false;
       }
       }
       index = ClipboardText.IndexOf(strNum[2]);
       if (index!=-1)
       {
       index = this.Text.IndexOf(strNum[2]);
       if (index!=-1)
       {
       return false;
       }
       }
       for(int i=0; i<ClipboardText.Length; i++)
       {
       index = strNum.IndexOf(ClipboardText[i]);
       if (index <0)
       {
       return false;
       }
       }
       return true;
       }
      }
      }
      --摘自(http://blog.csdn.net/hbxtlhx/archive/2004/11/12/178510.aspx)
      

  16.   

    在六楼的提示下,我改成这样,可以输入小数,也可以输入负数
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                e.Handled = !(char.IsDigit(e.KeyChar)||(e.KeyChar == 8)||(e.KeyChar == 45)||(e.KeyChar ==46));  
            }
      

  17.   

    21楼的方法十分详细,但是我觉得做到只能输入数字和一些相关符号就够了(小数点和负号),至于对方硬要从剪贴板上复制粘贴,我们也可以在提交textbox数据时加以判断
    (个人看法,不对的话欢迎指教)
      

  18.   

    js写好了private方法还要回掉用户体验不好