Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 此代码立即将文本框更改为红色。我想要它像,点击按钮,然后红色,再然后绿色_C#_Button_If Statement - Fatal编程技术网

C# 此代码立即将文本框更改为红色。我想要它像,点击按钮,然后红色,再然后绿色

C# 此代码立即将文本框更改为红色。我想要它像,点击按钮,然后红色,再然后绿色,c#,button,if-statement,C#,Button,If Statement,此代码立即将文本框更改为红色。我希望它像,点击按钮,然后红色,再次,然后绿色 private void button1_Click(object sender, EventArgs e) { textBox1.BackColor = System.Drawing.Color.Black; if (textBox1.BackColor.Equals(System.Drawing.Color.Black)) { textBox1.BackColor =

此代码立即将文本框更改为红色。我希望它像,点击按钮,然后红色,再次,然后绿色

private void button1_Click(object sender, EventArgs e)
{

    textBox1.BackColor = System.Drawing.Color.Black;

    if (textBox1.BackColor.Equals(System.Drawing.Color.Black)) 
    {
        textBox1.BackColor = System.Drawing.Color.Red;
    }



    if (textBox1.BackColor.Equals(System.Drawing.Color.Red))
    {
        textBox1.BackColor = System.Drawing.Color.Green;
    }



    if (textBox1.BackColor.Equals(System.Drawing.Color.Green))
    {
        textBox1.BackColor = System.Drawing.Color.Blue;
    }



    if (textBox1.BackColor.Equals(System.Drawing.Color.Blue))
    {
        textBox1.BackColor = System.Drawing.Color.Red;
    }
}

首先,始终将颜色设置为黑色

最终的逻辑是:

Set the color to black.

Is it black? Yes - change to red.
Is it red? Yes - change to green.
Is it green? Yes - change to blue.
Is it blue? Yes - change to red.
不要那样做


将初始设置移到类构造函数中,并在设置颜色或使用if/elseif/else构造后立即从函数返回。

您在第一行将背景色设置为黑色,因此您将始终使用第一个大小写,它将变为红色

如果您愿意,switch语句可能会使您的代码看起来更漂亮一些

private void button1_Click(object sender, EventArgs e)
{
        switch (textBox1.BackColor.ToKnownColor())
        {
            case KnownColor.Red:
                textBox1.BackColor = Color.Green;
                break;
            case KnownColor.Green:
                textBox1.BackColor = Color.Blue;
                break;
            default:
                textBox1.BackColor = Color.Red;
                break;
        }
}
如果出现以下情况,则要使用else:

您所做的是将其更改为红色,然后检查它是否为红色并将其更改为绿色。如果不执行if-red,则使用else

此外,正如Tim在评论中指出的那样,如果每次单击都显示为黑色,则需要删除textBox1.BackColor=System.Drawing.Color.Black行以停止。在窗体的构造函数中将其设置为黑色。

您可以创建一个队列来确定下一个颜色,并在单击按钮时始终切换该颜色

private Queue<Color> colors = new Queue<Color>();
public Form1()
{
    InitializeComponent();

    //Here you set the order that the colors will be set in.
    colors.Enqueue(System.Drawing.Color.Black);
    colors.Enqueue(System.Drawing.Color.Red);
    colors.Enqueue(System.Drawing.Color.Gray);
    colors.Enqueue(System.Drawing.Color.Blue);
}

private void button1_Click(object sender, EventArgs e)
{
    textbox1.BackColor = colors.Peek();

    //move the color at the front to the back of the queue
    colors.Enqueue(colors.Dequeue());
}

这是开玩笑的。我测试了这段代码,它是有效的,任何时候都不推荐给任何人,这只是为了搞笑,因为我们还没有LINQ答案,如果需要,我会删除它,但是,下面是一个在LINQ语句中使用内联if来查找您要查找的颜色的示例。我提到过这个作品吗

        textBox1.BackColor = Color.FromKnownColor(((KnownColor[])Enum.GetValues(typeof(KnownColor)))
            .Where(c => c + (textBox1.BackColor == Color.Red ?
                (int)KnownColor.DarkSlateBlue : textBox1.BackColor == Color.Green ?
                (int)KnownColor.Chartreuse : (int)textBox1.BackColor.ToKnownColor() - (int)KnownColor.Red)
                == textBox1.BackColor.ToKnownColor())
                .FirstOrDefault());

是的,因为否则代码不会运行。当它是黑色时,它会显示颜色=red@user1803685-但你每次点击按钮都会这样做。您应该在构造函数中初始化它。按照你的方式,颜色永远不会循环。好吧,我该怎么解决这个问题?它需要一个中断或其他东西。@user1803685:使用Visual Studio中的“属性”窗格将初始文本框颜色设置为黑色。您不需要第一行将其设置为黑色,即使在构造函数中也不需要。正如Dave Shaw所指出的,你需要其他的if's。到目前为止,你的答案是最有用的,但正如其他人所指出的,最初将颜色设置为黑色只会导致触发第一个条件。这在当前状态下没有帮助,因为第一行仍然使其余的毫无意义。@TimSchmelter我认为我没有复制那行-doh-我现在将其删除,并澄清我的答案。@user1803685:第一次单击时。再次单击。@user1803685请看我刚刚编辑的最后一段,Tim对它的评论总是黑色的。只有在堆栈溢出时,才能使用六种不同的方法来更改文本框的颜色。这里唯一缺少的是Linq版本。@RobertHarvey和,除了Erby的回答外,他们都表现出不好的练习/没有抓住要点。@RobertHarvey补充了Linq版本。虽然不是最好的,但经过测试,效果良好。只是开个玩笑…@user1803685不起作用是毫无意义的。怎么搞的?您是否遇到错误,是运行时错误还是编译时错误?错误是什么?是否发生了不希望发生的事情,如果是,是什么?您是否做了任何更改,如果有,是什么?已测试。现在工作。对不起,我使用的是非常量输入开关。然而,对于这种情况,有一个很好的KnownColor枚举,如果您使用KnownColor,那么红色、绿色和蓝色是非常有名的。
        textBox1.BackColor = Color.FromKnownColor(((KnownColor[])Enum.GetValues(typeof(KnownColor)))
            .Where(c => c + (textBox1.BackColor == Color.Red ?
                (int)KnownColor.DarkSlateBlue : textBox1.BackColor == Color.Green ?
                (int)KnownColor.Chartreuse : (int)textBox1.BackColor.ToKnownColor() - (int)KnownColor.Red)
                == textBox1.BackColor.ToKnownColor())
                .FirstOrDefault());