尝试将所有文本框值都放入1d,2d数组
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
}
}
收到错误消息
这里有值
我错过了什么?
答案 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来存储相应的坐标。这将使事情更清晰,更不容易受到伤害。