C# Winform 项目,如何限制文本框(TextBox)只能输入只能输入数字(正数,负数,小数)

sxl_88 2017-05-31 09:27:08
在C# Winfrom项目中有很多要求输入数字的文本框,要求在TextBox文本框中,只能输入正数、负数以及小数。
希望能够通过正则表达式进行实现,或者写一个通用的函数实现该限制功能然后在各个文本框中进行调用该函数实现也可以。

请各位帮忙看看如何实现,谢谢!
...全文
3435 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞舞之飘叶 2017-11-24
  • 打赏
  • 举报
回复
测试楼主的方法,发现两个字符可输入:(,) ();并且全选中文本后,(.)可以置于开头 if (e.KeyChar < 45) { e.Handled = true; return; } 这个样可以屏蔽(,) ()
sxl_88 2017-06-01
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
你可以测试一下,看看“第二个点”能不能输入?数字中出现两个减号能不能输入?等等。
在您的基本上我修改了下,(文本框可以接收负数、小数、数字),经测试功能可以。代码如下: ctrol.KeyPress += (s, e) => { if (e.KeyChar < 45) return; if ((e.KeyChar != '.' && e.KeyChar != '-' ) && (e.KeyChar < '0' || e.KeyChar > '9')) { e.Handled = true; return; } var str = ctrol.Text + e.KeyChar; if (str == "-") return; double x; if (!double.TryParse(str, out x)) e.Handled = true; };
sxl_88 2017-06-01
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
随便给你写一个
   public static   class Extensions
    {
        public static void 判断是数字啦(this TextBox ctrol)
        {
            ctrol.KeyPress += (s, e) =>
            {
                if (e.KeyChar < 34)
                    return;

                if (e.KeyChar != '.' && (e.KeyChar < '0' || e.KeyChar > '9'))
                {
                    e.Handled = true;
                    return;
                }

                var str = ctrol.Text + e.KeyChar;
                if (str == "-")
                    return;

                double x;
                if(! double.TryParse( str, out x ))
                    e.Handled = true;
            };
        }
    }
那么你就能在任何一个窗口的初始化中调用它,例如写
    private void Form1_Load(object sender, EventArgs e)
    {
        this.textBox1.判断是数字啦();
    }
上面我只是乱写的,比如说“34”这个并没有查一下实际的控制键 ASCII 码,或许改为20更准确?你自己查一下 ASCII 码表。
谢谢您的回复,基本上可以实现。但是我还想允许这个文本框可以输入负数(可以输入负数、小数,数字),这么改下?
crystal_lz 2017-05-31
  • 打赏
  • 举报
回复
直接用 NumericUpDown 控件不就完了吗 还搞的那么复杂
wxstar8 2017-05-31
  • 打赏
  • 举报
回复
4# 正解, WInform中TextBox有个KeyPress事件,可以在这个事件中去判断你允许输入的字符

 private void tbCapacity_KeyPress(object sender, KeyPressEventArgs e)
       {
            if ((e.KeyChar == 48))
            {
                e.Handled = true;
            }
        }
  • 打赏
  • 举报
回复
你可以测试一下,看看“第二个点”能不能输入?数字中出现两个减号能不能输入?等等。
  • 打赏
  • 举报
回复
随便给你写一个
   public static   class Extensions
    {
        public static void 判断是数字啦(this TextBox ctrol)
        {
            ctrol.KeyPress += (s, e) =>
            {
                if (e.KeyChar < 34)
                    return;

                if (e.KeyChar != '.' && (e.KeyChar < '0' || e.KeyChar > '9'))
                {
                    e.Handled = true;
                    return;
                }

                var str = ctrol.Text + e.KeyChar;
                if (str == "-")
                    return;

                double x;
                if(! double.TryParse( str, out x ))
                    e.Handled = true;
            };
        }
    }
那么你就能在任何一个窗口的初始化中调用它,例如写
    private void Form1_Load(object sender, EventArgs e)
    {
        this.textBox1.判断是数字啦();
    }
上面我只是乱写的,比如说“34”这个并没有查一下实际的控制键 ASCII 码,或许改为20更准确?你自己查一下 ASCII 码表。
  • 打赏
  • 举报
回复
引用 2 楼 sxl_88 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] 网上有正则表达式,动动手搜搜而已。
这边都尝试过了,都没有达到自己想要的结果,能帮忙看看。谢谢![/quote] 跟正则没有什么关系。既然是编程,那么验证一个字符串能不能转换为数字是很简单的,用不着你自己写什么东西。这里其实需要控制用户录入,录入用户第一个负号录入,或者用户删除某个字符,要支持人家操作!
sxl_88 2017-05-31
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
网上有正则表达式,动动手搜搜而已。
这边都尝试过了,都没有达到自己想要的结果,能帮忙看看。谢谢!
  • 打赏
  • 举报
回复
网上有正则表达式,动动手搜搜而已。

111,083

社区成员

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

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

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