小妹请教前辈只让文本框输入数字!

wangtiantian23 2009-12-21 02:00:07
我有一个文本框!我如何只让用户输入的只能是数字等符号!
例如:-123.25,123.5,123456
只能输入这类格式,请各位前辈代码明示!

我写了段代码!请各位前辈帮我改成也行。


private bool nonNumberEntered = false;
private void txtTextBox_KeyDown(object sender, KeyEventArgs e)
{
nonNumberEntered = false;
if ((e.KeyCode < Keys.D0) || (e.KeyCode > Keys.D9 && e.KeyCode < Keys.NumPad0) || (e.KeyCode > Keys.NumPad9))
{
if (e.KeyCode != Keys.Back)
{
nonNumberEntered = true;
}
}
}
private void txtTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (nonNumberEntered)
{
e.Handled = true;
}

}


WinFrom程序!
...全文
608 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangtiantian23 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 zhlei616 的回复:]
这是我自己目前在用的

C# codeprivatevoid textBox1_KeyPress(object sender, KeyPressEventArgs e)
{//48-57为数字,8为退格,13为回车,45为负号,46为小数点if ((e.KeyChar<48|| e.KeyChar>57)&& e.KeyChar!=8&& e.KeyChar!=13&& e.KeyChar!=45&& e.KeyChar!=46)
{
e.Handled=true;
}//输入为负号时,只能在最开始输入一次if (e.KeyChar==45&& (((TextBox)sender).SelectionStart!=0|| ((TextBox)sender).Text.IndexOf("-")>=0))
{
e.Handled=true;
}
}
[/Quote]

您能在帮我改改吗!现在出现这种情况-123.0.0.这种格式都能出现!
能不能只出现一个小数点
liherun 2009-12-22
  • 打赏
  • 举报
回复
正则吧
wangtiantian23 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 yangglemu 的回复:]
美女提问,无论如何也要回答一下:

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsNumber(e.KeyChar))
                e.Handled = true;
        }
很简单的问题,让上面的搞的很复杂
[/Quote]

前辈您的也只允许我输入数字!但是没有小数点!
-123.00这样的数字根本出不来
wangtiantian23 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 zjj0511 的回复:]
这是在WinForm中的判断
1. 激发TextBox 的KeyPress事件

2. private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            //允许输入的字符
            string AstrictChar = "0123456789,";

            //「BackSpace」「Delete」后退键正常删除操作
            if ((Keys)(e.KeyChar) == Keys.Back || (Keys)(e.KeyChar) == Keys.Delete)
            {
                return;
            }
            //「Ctrl+C」(3)「Ctrl+X」(24)特殊组合键正常
            //「Ctrl+Z」(26) 撤消组合键正常
            if ((e.KeyChar == 3) || (e.KeyChar == 24) || (e.KeyChar == 26))
            {
                return;
            }

            //允许输入的字符外,
            if (AstrictChar.IndexOf(e.KeyChar.ToString()) == -1)
            {
                e.Handled = true;
                return;
            }
        }

[/Quote]

前辈!您这个方法如果我输入123.12.23 这样的数也是正确的!显然不是我想要的!
并且我还想要 -123.00这种格式的数字!
zhlei616 2009-12-22
  • 打赏
  • 举报
回复
改好了,原来还有bug

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//48-57为数字,8为退格,13为回车,45为负号,46为小数点
if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != 13 && e.KeyChar != 45 && e.KeyChar != 46)
{
e.Handled = true;
}

//输入为负号时,只能在最开始输入一次
if (e.KeyChar == 45 && (((TextBox)sender).SelectionStart != 0 || ((TextBox)sender).Text.IndexOf("-") >= 0))
{
e.Handled = true;
}

//小数点只能输入一次,且不可以在第一个字符出现,不可以跟在负号后面出现
if (e.KeyChar == 46 && ( ((TextBox)sender).Text.IndexOf(".") != -1 || ((TextBox)sender).SelectionStart == 0 || ((TextBox)sender).Text=="-" ))
{
e.Handled = true;
}
}

[Quote=引用 47 楼 wangtiantian23 的回复:]
引用 26 楼 zhlei616 的回复:
这是我自己目前在用的

C# codeprivatevoid textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {//48-57为数字,8为退格,13为回车,45为负号,46为小数点if ((e.KeyChar <48|| e.KeyChar>57)&& e.KeyChar!=8&& e.KeyChar!=13&& e.KeyChar!=45&& e.KeyChar!=46)
            {
                e.Handled=true;
            }//输入为负号时,只能在最开始输入一次if (e.KeyChar==45&& (((TextBox)sender).SelectionStart!=0|| ((TextBox)sender).Text.IndexOf("-")>=0))
            {
                e.Handled=true;
            }
        }


您能在帮我改改吗!现在出现这种情况-123.0.0.这种格式都能出现!
能不能只出现一个小数点
[/Quote]
myrroom 2009-12-21
  • 打赏
  • 举报
回复
这么多答案了 那我就来看美女..
  • 打赏
  • 举报
回复
这个问题,没有比我更好的方法,就不要来误导小妹妹了
  • 打赏
  • 举报
回复
美女提问,无论如何也要回答一下:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar))
e.Handled = true;
}
很简单的问题,让上面的搞的很复杂
yang739698559 2009-12-21
  • 打赏
  • 举报
回复
正则。。。
ooo0000ooooo 2009-12-21
  • 打赏
  • 举报
回复
用Foreach逐个读取并判断,如果不为数字则将此字符赋为空值
mliomo 2009-12-21
  • 打赏
  • 举报
回复
用正则吧!
zjj0511 2009-12-21
  • 打赏
  • 举报
回复
这是在WinForm中的判断
1. 激发TextBox 的KeyPress事件

2. private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//允许输入的字符
string AstrictChar = "0123456789,";

//「BackSpace」「Delete」后退键正常删除操作
if ((Keys)(e.KeyChar) == Keys.Back || (Keys)(e.KeyChar) == Keys.Delete)
{
return;
}
//「Ctrl+C」(3)「Ctrl+X」(24)特殊组合键正常
//「Ctrl+Z」(26) 撤消组合键正常
if ((e.KeyChar == 3) || (e.KeyChar == 24) || (e.KeyChar == 26))
{
return;
}

//允许输入的字符外,
if (AstrictChar.IndexOf(e.KeyChar.ToString()) == -1)
{
e.Handled = true;
return;
}
}
lsd123 2009-12-21
  • 打赏
  • 举报
回复
.
gary_cai 2009-12-21
  • 打赏
  • 举报
回复
String tmp ;
tmp = tmp.UpperCase();
for(int i=0;i<tmp.Length(); i++)
{
String ch = tmp.SubString(i+1, 1);
if((ch>="0"&&ch<="9")||(ch=="-"))
{
;

}
else
{
showmessage("有非法字符输入!")
}
}
tmp 就是你要输入的文本框的内容
骑猪看海 2009-12-21
  • 打赏
  • 举报
回复
最好用的方法是用 javascript event.keyCode 我写的只能输数字和小数点

function validateInput()
{
var keyCode = event.keyCode;
if (keyCode)
{
if (!((keyCode>=48 && keyCode<=57) || (keyCode>=96 && keyCode<=105) || keyCode==110 || keyCode==8 || (event.ctrlKey && keyCode==86)))
{
event.returnValue = false;
}
}
}
hovoy 2009-12-21
  • 打赏
  • 举报
回复
换那个可上下拉的那个数字控件也可以吧?
骑猪看海 2009-12-21
  • 打赏
  • 举报
回复
最好用的方法是用 javascript event.keyCode 我写的只能输数字和小数点

function validateInput()
{
var keyCode = event.keyCode;
if (keyCode)
{
if (!((keyCode>=48 && keyCode<=57) || (keyCode>=96 && keyCode<=105) || keyCode==110 || keyCode==8 || (event.ctrlKey && keyCode==86)))
{
event.returnValue = false;
}
}
}
不懂装懂 2009-12-21
  • 打赏
  • 举报
回复
private void Num_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != 8 && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
然后在textbox的keypress事件加Num_KeyPress
lvnianjie 2009-12-21
  • 打赏
  • 举报
回复
用正则表达式正解,也有取巧的办法
private string StrCheck(TextBox txtStr, string strRemark, int i)
{
string strErr = "";
string strTemp = txtStr.Text.Trim();
if (strTemp.Length > 0)
{
try
{
Convert.ToDecimal(strTemp);
}
catch
{
strErr = "第" + (i + 1).ToString() + "行" + strRemark + "!\\n";
}
}
return strErr;
}
bl_song 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 crius 的回复:]
C# code#region 验证输入字符串为数字///<summary>/// 验证输入字符串为数字///</summary>///<param name="P_str_num">输入字符</param>///<returns>返回一个bool类型的值</returns>publicbool validateNum(string P_str_num)
{return Regex.IsMatch(P_str_num,@"^([1-9]\d*|[1-9]\d*.\d+|0|0.\d+)$");
}#endregion
[/Quote]
不错,图像相当有诱惑性!
加载更多回复(27)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧