0

私はユーザーから値を取得しようとしています。ボタンをクリックするたびに、試行回数を表すステートメントと写真を印刷する必要があります。if ステートメントは機能していますが、常に最後のケースの写真が表示されます。

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.Text != "")
    {    
        int gussednum= Convert.ToInt16( textBox1.Text); 

        for (int i = 0; i < 7; ++i)
        {
                if (interednum < num)
                {
                    label1.Text = "Should be greater than" + num;
                    switch (i)
                    {
                        case (0) :
                            Image image = Image.FromFile("1.png");
                            pictureBox1.Image = image;
                            break;

                        case (1):
                            Image im2 = Image.FromFile("2.png");
                            pictureBox1.Image = im2;
                            break;

                        case (2):
                            Image im3 = Image.FromFile("3.png");
                            pictureBox1.Image = im3;
                            break;

                        case (3):
                            Image image4 = Image.FromFile("4.png");
                            pictureBox1.Image = image4;
                            break;

                        case (4):
                            Image image5 = Image.FromFile("5.png");
                            pictureBox1.Image = image5;
                            break;

                        case (5):
                            Image image6 = Image.FromFile("dead.gif");
                            pictureBox1.Image = image6;
                            break;

                        case (6):
                            Image image7 = Image.FromFile("red.png");
                            pictureBox1.Image = image7;
                            break;
                    }
                }
4

3 に答える 3

1

常に画像を pictureBox1 に割り当てます。そして明らかに、ループ内の最後のスイッチ/ケースが実行されます (#7)

pictureBox1.Image = image5;

そのため、コピー/貼り付けで pictureBox1 の入力を間違えたか、(スイッチ/ケース ブレークから) ループも中断する必要があります。

それがStackOverflowの質問であるかどうかはわかりませんが、コピー/貼り付けの問題です。

于 2013-11-03T20:30:16.713 に答える
0

ループで実行されるため、最初の画像、次の画像、というように最後まで挿入されます。それを見るのが早すぎる可能性があるので、最後の画像しか表示されません。そのプログラムをデバッグして、それが真であることを確認してください。

私のアドバイス: switch の場合は、すべての break のコマンドを "return" に変更するだけです。それで全部です。

Ps。私の意見では、このコードには意味がありません (for ループでの大文字と小文字の切り替えについて述べています ;))。

于 2013-11-03T20:41:48.243 に答える
0

switch/caseをこれでラップしたのでloop

for (int i = 0; i < 7; ++i)

いつでも、次のとおりですtrue

interednum < num

実行するたびにループするため、常にiequal toになります。6これが、常に最後の を出力する理由caseです。

これは問題になる場合とそうでない場合がありますが、検討する価値があります。いつも同じオブジェクトを変更しているようです ( pictureBox1):

pictureBox1.Image = image7;

オブジェクトが複数ある場合はpictureBox、代わりに次のようになります。

pictureBox7.Image = image7;//do this for every pictureBox in every case statement
于 2013-11-03T20:30:43.653 に答える