1

すべてのテキストボックスの値を 1 次元、2 次元配列に取得しようとしています

http://content.screencast.com/users/TT13/folders/Jing/media/7689e48c-9bd6-4e22-b610-656b8d5dcaab/2012-07-06_0347.png

int[] xMatrix = new int[6], yMatrix = new int[6];
            int[,] aMatrix = new int[6, 6], bMatrix = new int[6, 6], cMatrix = new int[6, 6];

            foreach (Control control in this.Controls)
            {
                if (control is TextBox)
                {
                    string pos = control.Name.Substring(1);
                    if (control.Name.StartsWith("a"))
                    {
                        int matrixPos = Convert.ToInt32(pos);
                        int x = matrixPos / 10;
                        int y = matrixPos % 10;
                        aMatrix[x, y] = Convert.ToInt32(control.Text);
                    }
                    else if (control.Name.StartsWith("b"))
                    {
                        int matrixPos = Convert.ToInt32(pos);
                        int x = matrixPos / 10;
                        int y = matrixPos % 10;
                        bMatrix[x, y] = Convert.ToInt32(control.Text);
                    }
                    else if (control.Name.StartsWith("c"))
                    {
                        int matrixPos = Convert.ToInt32(pos);
                        int x = matrixPos / 10;
                        int y = matrixPos % 10;
                        cMatrix[x, y] = Convert.ToInt32(control.Text);
                    }
                    else if (control.Name.StartsWith("x"))
                    {
                        int arrayPos = Convert.ToInt32(pos);
                        xMatrix[arrayPos] = Convert.ToInt32(control.Text);
                    }
                    else if (control.Name.StartsWith("y"))
                    {
                        int arrayPos = Convert.ToInt32(pos);
                        yMatrix[arrayPos] = Convert.ToInt32(control.Text); // <== ERROR LINE
                    }
}

エラー メッセージの取得

ここに画像の説明を入力

そして、ここに与えられた値があります

ここに画像の説明を入力

私は何が欠けていますか?

4

3 に答える 3

2

arrayPosで値を取得していると思います。そのため、は6つの要素の配列として定義されている >= 6ため、この例外が発生します。yMatrix

int arrayPos = Convert.ToInt32(pos);

ここでposはから string pos = control.Name.Substring(1);のものであり、デバッガーを配置して、どのような値を取得しているかを確認しますpos

于 2012-07-06T05:22:20.357 に答える
1

この行が実行されるとき:

int arrayPos = Convert.ToInt32(pos);

おそらくarrayPosが6になります(データが不十分であると推測します)。

配列は0ベースです。つまり、配列の有効なインデックスは0〜5です。コントロールの名前は1〜6です。

その場合は、arrayPosから1を引いて、範囲1..6から範囲0..5に変換します。

int arrayPos = Convert.ToInt32(pos) - 1;
于 2012-07-06T05:26:46.673 に答える
0

名前が「y6」-「y9」で始まる TextBox (または派生 Control) がいくつかあるようです。...designer.cs ファイルを確認すると、そのファイルを見つけるのに役立ちます。

または、その危険な道を離れて変数名を使用してパラメーターを格納することもできます。代わりに、TextBoxes の Tag-Property を使用して、対応する座標を格納できます。これにより、物事がより明確になり、脆弱性が少なくなります。

于 2012-07-06T05:32:31.657 に答える