0

txtDefinavalor.Text我只能输入 1% 到 999% 的值,所以我编写了代码,如果值高于 100%,则将文本框的值更改为 100%。为此,我从文本框中删除了 % 并使用 convert.int32 制作了 if 代码(有相同的错误),然后尝试了 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%";
    }
}

怎么解决?

4

8 回答 8

1

所有这些字符串操作都很棒而且很有趣,但是如果关键是用户不应该在输入中输入空格,那你为什么要让他呢?

考虑到其他回答这个问题的人,解决方案是让用户保持直截了当,而不是让他们输入虚假字符。

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

只需从控件中派生一个新控件,NumericUpDown让它为您完成繁重的工作。

就像是:

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

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

overrideUpdateEditText()确保在编辑发生后自动为您附加 % 符号。

您可以设置有效值的范围,只允许用户输入(或向上/向下值),您也可以在此处获得自动验证。它具有您可以设置的属性MinMax

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

如果可以,不妨利用内置控件,而不是重新发明轮子。

只是一个想法。

于 2013-04-18T12:10:06.677 回答
0

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

于 2013-04-18T12:12:04.157 回答
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%"
于 2013-04-18T12:12:12.473 回答
0

如果您使用的是 winforms,请使用仅允许您输入数字的 maskedtextbox,甚至是 numericupdown 字段,您可以设置它的上限和下限,并且只允许输入数字。

如果您使用的是 asp.net,那么您应该只使用不允许他们输入某些值的验证控件。例如范围验证器。

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

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

}
else
{
   // error condition handled here
}
于 2013-04-18T12:02:05.513 回答
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 ...

}
}
于 2013-04-18T12:03:06.353 回答
0

尝试:

string valor = txtDefinavalor.Text.Trim().Replace("%", "");
if (Convert.ToInt32(valor) > 100)
{
    txtDefinavalor.Text = "100%";
}
于 2013-04-18T11:57:56.667 回答
0

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

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

或者

您的字符串中可能有一些无效的 Int char。为了解决这个问题,使用这个 foreach 循环:

        foreach (char letter in valor)
        {
            if(!char.IsDigit(letter))
                valor = valor.Replace(letter.ToString(), string.Empty);
        }
于 2013-04-18T11:58:42.690 回答
0

@Habib 可能是对的 - 输入字符串中有一些非数字字符。但是,我首选的方法是消除在文本框中添加百分号的需要。要么将其放在标识文本框的标签中,要么将其作为文本框之后的标签。

于 2013-04-18T12:04:03.357 回答