3

このコードは、テキストボックスを即座に赤に変更します。ボタンをクリックしてから赤、もう一度クリックして緑にします。

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

5 に答える 5

8

まず、色を常に黒に設定します。

ロジックは次のようになります。

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構成を使用する)とすぐに関数から戻ります。

于 2012-11-06T16:11:19.703 に答える
6

使用したいelse if

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

あなたがしていたのは、それをに変更しred、それがそうであるかどうかを確認して、redに変更することgreenです。を使用すると、実行されない場合else ifは実行されません。if redblack

また、Timがコメントで指摘しているように、クリックするたびtextBox1.BackColor = System.Drawing.Color.Blackに停止する行を削除する必要があります。フォームのコンストラクターでにblack設定します。black

于 2012-11-06T16:12:23.380 に答える
4

最初の行でBackColorを黒に設定しているので、常に最初のケースにヒットし、赤に変わります。

もしあなたがそんなに傾いているなら、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;
        }
}
于 2012-11-06T16:11:48.310 に答える
1

Queue<Color>次のを決定するためにを作成しColor、ボタンをクリックしたときに常にそれを切り替えることができます。

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());
}
于 2012-11-06T16:13:48.367 に答える
0

これは面白くすることです。私はこのコードをテストしましたが、動作しますが、誰にも推奨されません。LINQの回答がまだないため、これは間抜けです。要求された場合は削除しますが、インラインの使用例を次に示します。 LINQステートメント内で、探している色を見つける場合。私はこれがうまくいくと言いましたか?

        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());
于 2012-11-06T21:06:05.177 に答える