所以我将此设置为存储水平值:
foreach (Label waitingCar in labels)
{
int i = 0;
carVal[i,0] = i + 1;
int x = waitingCar.Left;
carVal[i, 0] = x;
int y = waitingCar.Top;
carVal[i, 1] = y;
}
然后我有这个重置位置,但它似乎将它们全部重置到相同的位置,似乎是1,0或某些东西(表格的左上角)显然,值未被正确存储或正确阅读。
for (int i = 0; i <carVal.GetLength(0); i++)
{
waitingCar.Location = new Point(carVal[i,0],carVal[i,1]);
}
对于一些额外的信息,我的标签是waitingCar和waitingCar1到9。
答案 0 :(得分:0)
<强>问题:强>
正如 @TaW 所述,问题是您每次都在int i = 0;
循环内设置foreach
。它应该在foreach
循环之外设置并在循环内递增。正如 @Scott Chamberlain 所说,代码只设置了第一个carVal
项,默认情况下,carVal
属于int[,]
类型,默认值为每个项目都为0
,即使您没有设置它们。
虽然我现在没有VS确认。
解决方案1:如果你想继续使用int
2D数组,虽然我建议将List<Point>
建议为 @Scott Chamberlain ,你可以使用这样的东西。我现在没有visual studio,所以我的语法错了:
var carVal = int[labels.length,2];
foreach(var waitingCar in labels.Select( (lbl,i) > new { lbl = lbl, i = i } ){
carVal[waitingCar.i,0] = waitingCar.lbl.Left;
carVal[waitingCar.i,1] = waitingCar.lbl.Top;
}
然后重置你将使用以下。如果这当然假设(labels.Length == carVal.GetLength(0))
foreach(var waitingCar in labels.Select( (lbl,i) > new { lbl = lbl, i = i } ){
waitingCar.lbl.Location = new Point(carVal[waitingCar.i,0],carVal[waitingCar.i,1]);
}
解决方案2 :如果您想使用List<Point>
,而不是 @Scott Chamberlain 建议,请考虑以下选项:
var carVal = new List<Point>();
foreach(var waitingCar in labels){
carVal.Add(waitingCar.Location);
}
然后重置,如果这当然假设(labels.Length == carVal.Count)
。我假设labels
类型为Label[]
(数组),我设置carVal
类型List<Point>
(列表)。
for(int i = 0; i < carVal.Count; i++){
labels[i].Location = carVal[i];
}
我再也没有视觉工作室,所以我可能会遇到一些语法错误