-1

配列を特定のテキスト ボックスにロードする方法の解決策を探しています。先日も同様の質問を投稿しました。提供された答えは良かったのですが、コード内での配置に問題があると思われる問題が発生しています。これは私が持っているものです:

    private void btnQuickPlayNumbers_Click(object sender, EventArgs e)
    {
        int randCheck = 0;

        Random rand = new Random();

        int[] powerball5 = new int[5];

        for (int i = 0; i < powerball5.Length; )
        {
            randCheck = rand.Next(0, 60);

            while (!(powerball5.Contains(randCheck)))
            {
                powerball5[i] = randCheck;

                foreach (Control x in this.Controls)
                {
                    if (x is TextBox)
                    {
                        ((TextBox)x).Text = powerball5[i].ToString();                            
                    }
                }

                i++;
            }                
        }
    }

これで、フォーラムのすべてのテキスト ボックスが読み込まれますが、問題はありませんが、すべてのテキスト ボックスに同じ番号が読み込まれます。これはパワーボール プログラムであり、次のようにアレイをボックスにロードする必要があります。

textbox1 = powerball5[0]; textbox2 = powerball5[1]; などなど。

ロードしようとしているボックスは全部で 5 個あります。これが同じ数値をそれらすべてにロードする理由は、foreach ループの位置が配列のロードとカウンターのインクリメントを許可していないためであるという結論に達しました。移動して独自のメソッドを作成しようとしましたが、独自のメソッドとして実行すると、範囲外のインデックス エラーが発生します。だから私は何をすべきかについて少し迷っています。どんな助けでも大いに感謝します。さらに情報が必要な場合は、すべての人のニーズを満たすためにできる限りの更新を試みます。お時間をいただきありがとうございました。

4

3 に答える 3

0

私はこれを前に見たことがありますが、ランダムクラスはホストマシンで生成されたランダムに見える数値を使用しますが、約20〜30ミリ秒ごとに更新されるため、「for」ループが非常に高速に移動するため、ランダムが更新されません。追加してみてください' system.threading.thread.sleep(25);' を for ループに追加します。

于 2013-02-14T03:35:08.857 に答える
0

コードを一致させるには、これを使用できます。

    int randCheck = 0;

    Random rand = new Random();

    int[] powerball5 = new int[5];
    TextBox[] textboxes = new TextBox[5];
    int count = 0;



    for (int i = 0; i < powerball5.Length; i++)
    {
        randCheck = rand.Next(0, 60);

        do
        {
            randCheck = rand.Next(0, 60);
        } while (Array.IndexOf(powerball5, randCheck) != -1);
        powerball5[i] = randCheck;
    }

    foreach (TextBox x in this.Controls)
    {
            x.Text = powerball5[count].ToString();
            count++;
    }
于 2013-02-14T01:01:18.670 に答える
0

このコードは、すべてのテキスト ボックスに同じ数値を 5 回読み込むため、最後の数値のみを取得します。

            foreach (Control x in this.Controls)
            {
                if (x is TextBox)
                {
                    ((TextBox)x).Text = powerball5[i].ToString();                            
                }
            }

おそらく次のように構成する必要があります。

int[] whiteNumbers = DrawPowerballWhites();

// should be in its own function -- DisplayPowerballNumbers(int[] whites, int powerball)
var whiteTextboxes = this.Controls
                         .OfType<TextBox>()
                         .Where(t => IsWhiteTextbox(t))
                         .Select((textbox,index) => new {textbox, index});

foreach(var indexedTextBox in whiteTextboxes)
{
   indexedTextbox.textbox.Text = whiteNumbers[indexedTextbox.index];
}
于 2013-02-14T00:53:17.477 に答える