如果等用户输入完后,点击某个button按钮去验证的话比较好做,只要把textBox的值强转成double,用try chatch去验证就可以。但是我现在想在用户输入的过程中去给出提示,想到了用_TextChanged事件,逐个字符去验证,
但这样在_TextChanged事件事件中强转成double显然是不行的(比如用户输入个负号,这时候强转double会报错,实际上用户还没有输入完整...)求高手支招!!!

解决方案 »

  1.   

    在input 标签里写:
    onKeyPress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;"这样就可以限制输入的只能是数字了!
      

  2.   

    你就用textboxchanged事件。            if (!Regex.Match(textBox2.Text.Trim(), @"^\-?\d*$",RegexOptions.Singleline).Success)
                {
                    textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length - 1);
                }
      

  3.   

      textBox2.SelectionStart = textBox2.Text.Length;在里面加这句,光标定位在最后输入的地方,更科学。
      

  4.   


    <input type="text" onchange="textChange(this)" /><div id="msg" style="color:Red;"></div>
    <script type="text/javascript">
        function textChange(txt) {
            var reg = /^-?(\d{1}|[1-9]{1}\d+)(\.{1}\d*[1-9]{1}|)$/
            var s = reg.test(txt);
            if (!reg.test(txt.value)) {
                document.getElementById("msg").innerHTML = "输入数字非法";
            }
            else {
                document.getElementById("msg").innerHTML = "";
            }
        }
    </script>
      

  5.   

    输入时就进行控制,参考下面的帖子:http://topic.csdn.net/u/20110429/01/719eb007-c1d9-4ac5-bce9-604082b19f8f.html
      

  6.   

    方案一:使用正则表达式,是一种很不错的选择。
             表达式  ^[-+]?\d+(\.\d+)?$  
                 描述  匹配实数  
                    匹配的例子  18,+3.14,-9.90  方案二:订阅Leave事件而不是TextChanged,也就是在输入框失去焦点的时候触发事件。
      

  7.   

    不是数字不给输入
    function Numbers(e){
    var keynum
    var keychar
    var numcheckif(window.event){ // IE
    keynum = e.keyCode
    }else if(e.which){ // Netscape/Firefox/Opera

    keynum = e.which
    }
    keychar = String.fromCharCode(keynum)
    numcheck = /\d/
    return numcheck.test(keychar)
    }
      

  8.   

    onkeypress  事件中调用
    <input type="text" id="phoneid1" onkeypress="return Numbers(event)" maxlength="11" name="restaurant.restaurantsPhone1" value="${restaurant.restaurantsPhone1 }" />
      

  9.   

     <asp:TextBox ID="txtpage" runat="server" Width="61px" 
    OnKeyPress="if(((event.keyCode>=48)&&(event.keyCode <=57))||(event.keyCode==46)) {event.returnValue=true;} else{event.returnValue=false;}" >
    </asp:TextBox>
      

  10.   

    LZ 在asp.net中么?
    如果是你可以用js实现 去百度下很多 很好时间 我这有源码呵呵 QQ453367672如果是winform的话 LZ可以用文本框键盘按下时间来判断撒
      

  11.   

    大家都说的很好!加起来完全可以解决楼主需求!
    我这里给楼主推荐使用Dev 控件textEdit,不用写一行代码,只须设置Editmask属性即可!
    楼主不妨试试
      

  12.   

    不要在TextChanged事件里边做,在输入框失去焦点后激活的leave 事件里边做就一点事情都木有了
      

  13.   

    可以参考http://www.codeproject.com/KB/edit/TNumEditBox.aspx
      

  14.   

                if (!Regex.Match(textBox2.Text.Trim(), @"^\-?(\d+\.?\d+$)", RegexOptions.Singleline).Success)
                {
                    textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length - 1);
                    textBox2.SelectionStart = textBox2.Text.Length;
                }把这个放在leave事件里,因为changed事件检查单个字符输入,输入负号时,你不能检查是否有数字,但是不检查又会导致只有符号存在,只有leave。当焦点离开的时候检查
      

  15.   

    LZ结贴结太早啦,这个方法我早用过了,代码比这还简洁。但有个很大的漏洞:如果是复制->粘贴进去的数据是不触发Key_Press事件的。
            private void txtTest_KeyPress(object sender, KeyPressEventArgs e)
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') && (e.KeyChar != '-' || txtTest.SelectionStart != 0) && (e.KeyChar != '.' || txtTest.Text.Contains('.'))
                    && e.KeyChar != '\x8' && e.KeyChar != '\n')
                    e.KeyChar = '\0';
            }