0

我正在做一个项目,我希望有一个文本输入框,如果数字为 0 或更大,则将文本的前景色设置为黑色,如果数字低于 0,则设置为红色。这是我的代码到目前为止,它已在“TextChanged”的文本框事件处理程序下输入,以便每次文本更改时都会运行。这是代码,

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.TextLength > 1)
        {
            valueCheck = Convert.ToInt32(textBox1.Text);
        }
        if (valueCheck < 1)
        {
            textBox1.ForeColor = Color.Red;
        }
        else if (valueCheck > 0)
        {
            textBox1.ForeColor = Color.Black;
        }
        else
        {
            textBox1.ForeColor = Color.Black;
        }
        valueCheck = 0;
    }

当我输入任何一种数字时,问题就来了,它是红色的。但是当我输入第二个正数时,它会变成黑色。我不太确定发生了什么,我认为这可能与代码在每次通过时验证的方式有关。如果有人可以帮助我,我将不胜感激。

4

2 回答 2

1

如果 (textBox1.TextLength > 1)

当您输入任何类型的 1 个数字时,textBox1 的长度不大于 1,因此未设置 valueCheck。

在用户仅输入 ( - ) 符号的情况下,Convert.ToInt32 也可以引发异常。

     private void textBox1_TextChanged(object sender, EventArgs e)
    {
        int valueCheck = 0;
        if (textBox1.TextLength >= 1)
        {
            Int32.TryParse(textBox1.Text, out valueCheck);
        }
        if (valueCheck < 1)
        {
            textBox1.ForeColor = Color.Red;
        }
        else if (valueCheck > 0)
        {
            textBox1.ForeColor = Color.Black;
        }
        valueCheck = 0;
    }
于 2013-09-06T01:13:20.710 回答
0

您的第一个 if 语句只会设置valueCheckifTextLength大于 1,而不是大于 0。

例子:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (textBox1.TextLength != 0) // more than 0 characters
    {
        valueCheck = Convert.ToInt32(textBox1.Text);
    }

    if (valueCheck >= 0) // Greater/Equal than 0, Black
    {
        textBox1.ForeColor = Color.Black;
    }
    else // less than 0, Red
    {
        textBox1.ForeColor = Color.Red;
    }

    valueCheck = 0;
}

或者

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (textBox1.TextLength != 0)
    {
        valueCheck = Convert.ToInt32(textBox1.Text);
    }
    textBox1.ForeColor = valueCheck >= 0 Color.Black : Color.Red
    valueCheck = 0;
}
于 2013-09-06T01:11:59.910 回答