索引超出范围异常错误

时间:2012-07-06 05:17:57

标签: c# winforms visual-studio-2010 visual-studio textbox

尝试将所有文​​本框值都放入1d,2d数组

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

收到错误消息

enter image description here

这里有值

enter image description here

我错过了什么?

3 个答案:

答案 0 :(得分:2)

我认为您在arrayPos >= 6中获得了价值,这就是您获得此异常的原因,因为yMatrix被定义为包含6个元素的数组。

int arrayPos = Convert.ToInt32(pos);

此处pos来自string pos = control.Name.Substring(1);,放置一个调试器,看看您在pos中获得了什么价值。

答案 1 :(得分: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;

答案 2 :(得分:0)

似乎有一些TextBox(或派生控件),名称以“y6” - “y9”开头。 检查你的... designer.cs文件应该有助于找到那个。

或者你可以放弃使用变量名存储参数的危险之路。相反,您可以使用TextBoxes的Tag-Property来存储相应的坐标。这将使事情更清晰,更不容易受到伤害。