检查TextBox输入是否为十进制数 - C#

4

我的目标:我希望文本框可以接受类似于123.45或0.45或1004.72这样的小数。如果用户输入字母如a、b或c,程序应该显示一个警告消息,提示用户只能输入数字。

我的问题:我的代码只检查像1003或567或1这样的数字。它不检查像123.45或0.45这样的小数。我该如何让我的文本框检查小数?以下是我的代码:

namespace Error_Testing
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string tString = textBox1.Text;
            if (tString.Trim() == "") return;
            for (int i = 0; i < tString.Length; i++)
            {
                if (!char.IsNumber(tString[i]))
                {
                    MessageBox.Show("Please enter a valid number");
                    return;
                }
            }
            //If it get's here it's a valid number
        }
    } 
}

我是一名新手,提前感谢您的帮助。 :)


首先,您没有处理“.”字符。如果用户在文本框中输入它,会发生什么? - Jon La Marr
你是想自己编写代码检查还是使用内置的检查?在.NET中,使用decimal.TryParsedouble.TryParse非常简单。 - cadrell0
@JonLaMarr:如果我在文本框中输入123.,屏幕上会出现一个对话框:“请输入有效的数字”。这意味着文本框没有检查小数。 - Smith
@cadrell0:是的,我可以使用内置的或者更容易的方式。但是,由于这是我在C#编程中的前几次尝试之一,所以我不知道该怎么做。 - Smith
1
@Smith新员工的答案就是这么简单。 - cadrell0
@cadrell0:是的,我刚看到NewHire的答案,它有效了。谢谢你的帮助。 - Smith
3个回答

23

使用Decimal.TryParse来检查输入的字符串是否是十进制数。

decimal d;
if(decimal.TryParse(textBox1.Text, out d))
{
    //valid 
}
else
{
    //invalid
    MessageBox.Show("Please enter a valid number");
    return;
}

对于整数,请使用 int.TryParse()。 - Rob van der Veer
@新员工:它成功了!谢谢你的帮助。我会尽快将其标记为答案。再次感谢。 - Smith
@Smith,欢迎您。在解析任何数字时,应该始终寻找TryParse系列方法,这些方法提供了不同类型的解析方式。例如:int.TryParse、DateTime.TryParse等。 - user2711965

0

decimal.TryParse 方法对包含“,”字符的字符串返回 true,例如像“0,12”这样的字符串会返回 true。


一些国家使用“.”作为小数分隔符,而其他国家使用“,”作为小数分隔符。您可以通过更改文化来更改此设置。有关更多信息,请参见此答案 stackoverflow answer - Erik

0
private void txtrate_TextChanged_1(object sender, EventArgs e)
        {
            double parsedValue;
            decimal d;
            // That Check the Value Double or Not
            if (!double.TryParse(txtrate.Text, out parsedValue))
            {
                //Then Check The Value Decimal or double Becouse The Retailler Software Tack A decimal or double value
                if (decimal.TryParse(txtrate.Text, out d) || double.TryParse(txtrate.Text, out parsedValue))
                {
                    purchase();
                }
                else
                {
                    //otherwise focus on agin TextBox With Value 0
                    txtrate.Focus();                  
                    txtrate.Text = "0";                   
                }


            }
            else
            {
                // that function will be used for calculation Like 
                purchase();
                /*  if (txtqty.Text != "" && txtrate.Text != "")
                  {
                      double rate = Convert.ToDouble(txtrate.Text);
                      double Qty = Convert.ToDouble(txtqty.Text);
                      amt = rate * Qty;
                  }*/

            }`enter code here`
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接