如何根据c#中输入的内容创建一个更改前颜色的文本框?

时间:2013-09-06 01:05:20

标签: c#

我正在开发一个项目,我希望有一个文本输入框,如果数字为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;
    }

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

2 个答案:

答案 0 :(得分:1)

  

if(textBox1.TextLength&gt; 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;
    }

答案 1 :(得分:0)

如果valueCheck大于1且不大于0,则您的第一个if语句只会设置TextLength

示例:

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;
}