关于TextBox只能输入数字的问题

liushiying18 2014-09-07 04:04:37
使用下面代码处理只能输入数字的时候,当光标在小数点前面的时候还能输入小数点,就会出现2个小数点,怎么样解决啊。

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_PASTE:
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Text))//粘贴的内容是否是文本
{
string str;
str = (String)iData.GetData(DataFormats.Text);
if (Regex.IsMatch(str, MatchString)) //文本内容是不是数字
{
break;
}
}
m.Result = IntPtr.Zero;
return;
case WM_CHAR:
int keyChar = m.WParam.ToInt32();
bool charIsNumber = (keyChar >= 48 && keyChar <= 57) || (keyChar >= 65296 && keyChar <= 65305); //数字
bool charIsCommand =
keyChar == 8 || //退格
keyChar == 26 || //撤销
keyChar == 3 || keyChar == 22 || keyChar == 24;//拷贝、粘贴、剪切
bool charIsDot = keyChar == 46; //.
int dotIndex = Text.IndexOf('.');
if (charIsNumber)
{
if (dotIndex != -1)
{
if (SelectionStart > dotIndex)
{
if (Text.Length - dotIndex > DecimalDigits)
{
m.WParam = IntPtr.Zero;
}
}
}
}
else if (charIsDot)
{
if (dotIndex != -1)
{
if (SelectionStart > dotIndex ||
dotIndex > SelectionStart + SelectionLength)
{
m.WParam = IntPtr.Zero;
}
}
else
{
if (Text.Length - SelectionStart > DecimalDigits)
{
m.WParam = IntPtr.Zero;
}
}
}
else if (!charIsCommand)
{
m.WParam = IntPtr.Zero;
}
break;
}
base.WndProc(ref m);
}
...全文
213 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
2楼的方法不错,可以试试,一般都是处理键盘事件去记录这些值
iGouzy 2014-09-08
  • 打赏
  • 举报
回复
把 > 改成 >= 就可以了吧 if (SelectionStart >= dotIndex || dotIndex >= SelectionStart + SelectionLength)
mscs_2693253416 2014-09-08
  • 打赏
  • 举报
回复
TextBox文本框只能输入数字提示 //TextBox控件设置 <asp:TextBox ID="txtQQ" runat="server" Font-Size="9pt" Width="150px" BackColor="White" MaxLength="13"></asp:TextBox> //正则表达式设置只能输入数字 *<asp:RegularExpressionValidator ID="revTxtMphone0" runat="server" ControlToValidate="txtQQ" ErrorMessage="您输入的号码有误,请重新输入" Font-Size="9pt" ValidationExpression="^\d+$">QQ号码只能输入数字</asp:RegularExpressionValidator>
ZhongGuanYao 2014-09-07
  • 打赏
  • 举报
回复
二楼代码只考虑到键盘输入的情况,复制粘贴情况没考虑。 一楼的办法较全面,学习了
ZhongGuanYao 2014-09-07
  • 打赏
  • 举报
回复
在TextBox的KeyPress事件处理方法判断键盘输入即可: //允许输入0到9数字、小数点号、退格 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !((e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar == '.') || (e.KeyChar == (char)Keys.Back)); //判断是否重复输入点号 if ((e.KeyChar == '.') && textBox1.Text.Contains(".")) { e.Handled = true; } }
  • 打赏
  • 举报
回复
判断是否整数或小数 double val; if (double.TryParse(Text, out val)) { }

110,500

社区成员

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

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

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