C#我怎样才能重置标签的位置?

时间:2016-05-27 15:19:45

标签: c# .net

所以我将此设置为存储水平值:

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。

1 个答案:

答案 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];
}

我再也没有视觉工作室,所以我可能会遇到一些语法错误