C# - 如果声明问题?

use*_*ser 1 c# if-statement

不确定这里究竟出了什么问题.我不确定我是否应该使用"else if"或者什么.这是代码:

    private void txtMessage_TextChanged(object sender, EventArgs e)
    {
        int length = txtMessage.TextLength;
        int left = 140 - length;
        charactersleft.Text = left.ToString() +  " characters left";

        if (left < 140)
        {
            charactersleft.ForeColor = Color.Green;
        }

        if (left < 110)
        {
            charactersleft.ForeColor = Color.Yellow;
        }

        if (left < 80)
        {
            charactersleft.ForeColor = Color.Orange;
        }

        if (left < 50)
        {
            charactersleft.ForeColor = Color.Red;
        }

        else
        {
            charactersleft.ForeColor = Color.Black;
        }
    }
Run Code Online (Sandbox Code Playgroud)

标签"charactersleft"的前景色应该根据txtMessage中的字符数而改变.但由于某种原因,它不起作用.我确信解决方案很简单,我很容易与整个"别的if"混淆.提前致谢.

cjk*_*cjk 14

这里的问题是如果长度是30,它将匹配每个if.如果对于每个语句,您应该颠倒顺序并使用else:

if (< 50)      // red
else if (< 80) // orange
...
else           //black
Run Code Online (Sandbox Code Playgroud)

  • 考虑到每个后续的IF块都会覆盖前一个IF块的行为,这个变化实际上解决了什么问题? (2认同)

Pab*_*ruz 6

将它们更改为:

    if (left < 50)
    {
        charactersleft.ForeColor = Color.Green;
    }
    else if (left < 80)
    {
        charactersleft.ForeColor = Color.Yellow;
    }
    else if (left < 110)
    {
        charactersleft.ForeColor = Color.Orange;
    }
    else if (left < 140)
    {
        charactersleft.ForeColor = Color.Red;
    }
    else
    {
        charactersleft.ForeColor = Color.Black;
    }
Run Code Online (Sandbox Code Playgroud)