尝试将TextBox.Text值转换为Int32时出错

时间:2013-04-18 11:53:09

标签: c# textbox type-conversion

txtDefinavalor.Text我只能输入1%到999%的值,所以我创建了代码,如果值高于100%,则将文本框的值更改为100%。 为此,我从文本框中删除了%,如果代码使用convert.int32(有相同的错误),则尝试int32.Parse(有相同的错误)。

错误是“输入字符串格式不正确”在线:

string valor = txtDefinavalor.Text.Replace("%", string.Empty);

我认为替换%后的文本框为“”已经是整数并且不需要转换,但是我不能使字符串>值

查看完整代码:

if (rbtPercentualmensal.Checked || rbtPercentualmedioanual.Checked)
{
    string valor = txtDefinavalor.Text.Replace("%", string.Empty);
    if (Int32.Parse(valor) > 100)
    {
        txtDefinavalor.Text = "100%";
    }
}

如何解决?

8 个答案:

答案 0 :(得分:1)

所有这些字符串操作都非常有趣但是如果要点是用户不应该在输入中输入空格,那么你为什么要让他

对于回答这个问题的其他人而言,解决方案是让用户保持直线和狭窄而不是允许他们输入伪造的字符。

除了学术练习之外,我会跳过所有这些sting处理和int解析,而是利用已经编写的内置代码。

只需从NumericUpDown控件中获取一个新控件,然后让它为您完成繁重的工作。

类似的东西:

public partial class PercentageNumericUpDown : NumericUpDown
{
    public PercentageNumericUpDown()
    {
        InitializeComponent();
    }

    protected override void UpdateEditText()
    {
        this.Text = this.Value + "%";
    }
}

override的{​​{1}}将确保在编辑后自动为您追加%符号。

您可以设置有效值的范围,只允许用户键入(或上/下值),您也可以在此处进行自动验证。它可以设置UpdateEditText()Min属性。

如果需要,它还允许您设置负范围。如果你需要那些小数位。

当你可以而不是重新发明轮子时,也可以利用内置控件。

只是一个想法。

答案 1 :(得分:0)

尝试:

string valor = txtDefinavalor.Text.Trim().Replace("%", "");
if (Convert.ToInt32(valor) > 100)
{
    txtDefinavalor.Text = "100%";
}

答案 2 :(得分:0)

尝试替换“。”和“,”(如果用户输入),也做TRIM!

string valor = txtDefinavalor.Text.Replace("%", string.Empty).Replace(",", string.Empty).Replace(".", string.Empty).Trim();

OR

您的字符串中可能存在一些无效的Int char。要解决这个问题,请使用此foreach循环:

        foreach (char letter in valor)
        {
            if(!char.IsDigit(letter))
                valor = valor.Replace(letter.ToString(), string.Empty);
        }

答案 3 :(得分:0)

如果你正在使用winforms,那么使用一个只允许输入数字的maskedtextbox,或者甚至是一个numericupdown字段,你可以设置它的高低限制,只允许数字在那里。

如果您使用的是asp.net,那么您应该使用不允许它们输入特定值的验证控件。比如范围验证器。

然后我假设是一个按钮点击比较变得更容易,因为您不必删除任何%符号或任何类型。此外,当你试图弄清楚某些东西是否是数字时,你应该使用tryparse来确保它实际上是一个数字。

int test;
if(Int32.TryParse(txtDefinavalor.Text, out test)
{
    // do something here

}
else
{
   // error condition handled here
}

答案 4 :(得分:0)

尝试使用int32.TryParse

if (rbtPercentualmensal.Checked || rbtPercentualmedioanual.Checked)
{
int j ;
string valor = txtDefinavalor.Text.Replace("%", string.Empty);
if(Int32.TryParse(valor,out j) && j > 100)
{
  //// Do what ever you want here ...

}
}

答案 5 :(得分:0)

@Habib可能是正确的 - 输入字符串中的一些非数字字符。但是,我首选的方法是删除在文本框中包含百分号的需要。可以在标识文本框的标签中使用,也可以在>文本框后标记为

答案 6 :(得分:0)

解决了问题。 我使用Convert.int16,但主要的问题是勇气得到错误的文本框值,所以它是空值,我想因为我有错误。无论如何,为了答案。现在它的工作

答案 7 :(得分:0)

检查这段示例源代码:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        public static string FilterText(string input)
        {
            // Replace % by spaces, then remove all spaces/tabs with Trim function.
            string filteredText = input.Replace("%", " ").Trim();
            // Parse the text.
            int number = Int32.Parse(filteredText);
            // Fix not expected values.
            number = (number < 0) ? 0 : number;
            number = (number > 100) ? 100 : number;

            return number + "%";
        }

        public static void Main(string[] args)
        {
            Console.WriteLine("\"100%\": \"" + FilterText("100%") + "\"");
            Console.WriteLine("\"  50%\t\t\": \"" + FilterText("  50%\t\t") + "\"");
            Console.WriteLine("\"0%\": \"" + FilterText("0%") + "\"");
            Console.WriteLine("\"150%\": \"" + FilterText("150%") + "\"");
            Console.WriteLine("\"   -06%  \t \": \"" + FilterText("   -06%  \t ") + "\"");
        }
    }
}

此示例的输出为:

"100%": "100%"
"  50%          ": "50%"
"0%": "0%"
"150%": "100%"
"   -06%         ": "0%"