c#文本框限制的问题

stzys599 2005-04-30 10:29:34
winform(C#)

请问有谁知道文本框怎么限制只能输入数字,并能限制小数点后面两位
如:
20.11


如果输入数值为 20.88
能自动四舍五入为 21.00

如果输入数值为 20.11
能自动四舍五入为 20.00

谢谢!

...全文
245 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgg06 2005-05-05
  • 打赏
  • 举报
回复
keypress
ycy589 2005-05-05
  • 打赏
  • 举报
回复
顶!!!
syfsz 2005-05-04
  • 打赏
  • 举报
回复
看来这个问题大家经常遇到啊,呵呵
qwerttyy 2005-05-03
  • 打赏
  • 举报
回复
学习
zhangxiaopin 2005-05-03
  • 打赏
  • 举报
回复
//只能输入数字函数
public bool IsNumeric(string strinput)
{
//声明一个字符数组
Char[] ca;
ca=strinput.ToArrayl();
for(int i=0;i<strinput.lenght;i++)
{
if((ca[i]<'0' || ca[i]>'9') && ca[i]!='.')
{
return false;
}
break;
}
return true;

}
marvelstack 2005-05-03
  • 打赏
  • 举报
回复
使用好的设计方法
http://www.microsoft.com/china/msdn/library/langtool/vcsharp/winforms03162004.mspx
kv4000 2005-05-01
  • 打赏
  • 举报
回复
up+study!
iGray 2005-05-01
  • 打赏
  • 举报
回复
给出个凑合的方法:
//1.处理KeyPress事件,限制输入的字符
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
//只接受数字,退格,Tab键,小数点
if ( !( Char.IsNumber(e.KeyChar) || e.KeyChar == '\b' || e.KeyChar == '\t' || e.KeyChar == '.' ) )
{
e.Handled = true;
}

}
//2.添加Validating事件,进行四舍五入,如果是非法输入,则拉回焦点
private void textBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
//四舍五入
try
{
//右边是一个decimal型,四舍五入赋值给f,作个示范
float f = (float) Decimal.Round(Convert.ToDecimal(textBox1.Text), 2);
textBox1.Text = f.ToString();
}
catch(Exception)
{
MessageBox.Show("非法格式的字符,请重新输入");
textBox1.Text="";
e.Cancel = true;
}
}
stzys599 2005-05-01
  • 打赏
  • 举报
回复
if(!IsNumber())
{
text1.Text="";
}
else
{
if(text1.Text.IndexOf(".")>-1)
{
string[] n=text1.Text.ToString().split('.');
if((int)n[1]>40)//在多一些判断处理
{
text1.Text=((int)n[0]+1)+"."+"00";
}
else
{
text1.Text=n[0]+"."+"00";
}
}
}
这个思路是可行的,可能过于复杂,你可以参考再做改善












是vb的,不能用
凨叔 2005-04-30
  • 打赏
  • 举报
回复
最好是重载ProcessKeyEventArgs.

//(keyValue>47 && keyValue<58) - Numbers 0-9
//keyValue==46 - Decimal point
//(keyValue>34 && keyValue<41) - Home, End, and Arrow Keys
//keyValue==8 - Backspace Key
//(m.Msg==256 && keyValue==46) - Delete Key
protected override bool ProcessKeyEventArgs(ref Message m)
{
int keyValue = m.WParam.ToInt32();
if((keyValue>47 && keyValue<58) || keyValue==46 || (keyValue>34 && keyValue<41) || keyValue==8 || (m.Msg==256 && keyValue==46))
{
return base.ProcessKeyPreview(ref m);
}
return true;
}
brando_beat 2005-04-30
  • 打赏
  • 举报
回复
up
singlepine 2005-04-30
  • 打赏
  • 举报
回复
if(!IsNumber())
{
text1.Text="";
}
else
{
if(text1.Text.IndexOf(".")>-1)
{
string[] n=text1.Text.ToString().split('.');
if((int)n[1]>40)//在多一些判断处理
{
text1.Text=((int)n[0]+1)+"."+"00";
}
else
{
text1.Text=n[0]+"."+"00";
}
}
}
这个思路是可行的,可能过于复杂,你可以参考再做改善
singlepine 2005-04-30
  • 打赏
  • 举报
回复
在text的change事件里做处理,
yufenfeila 2005-04-30
  • 打赏
  • 举报
回复
正则表达式解决
fanruinet 2005-04-30
  • 打赏
  • 举报
回复
在keypress事件中根据用户的输入和已有的内容进行判断

110,533

社区成员

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

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

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