Control.Location.Y没有返回正确的位置

时间:2016-11-17 09:34:32

标签: c# winforms location

我是c#的新手。我正在尝试制作一个列表,如下图所示的蓝色区域所示: enter image description here

我使用了一个简单的Panel而不是listbox,因为我需要为每个条目添加控件。现在,您在图像中看到的列表是我测试的列表,因此它只是硬编码的值。但是现在当我试图让每个条目动态地移动到最后一个以下时,我无法让它发生。我使用过Control.Location.Y,但每次返回第二个条目的Y坐标,条目相互重叠。

以下是代码:

public void enterItems (listingPanel list, int loc)
    {
        items.Add(list);
        int lastIndex = items.Count - 1;
        int newLoc = items[lastIndex].Location.Y + 52;
        this.Controls.Add(items[lastIndex]);
        if (lastIndex >= 1)
            items[lastIndex].Location = new Point(0, newLoc);
        Console.WriteLine("index: " + lastIndex + ", location Y: " + (items[lastIndex].Location.Y + 52) + " last loc: " + items[lastIndex].Location.Y + "Total: " + items.Count);
    }

这是调用enterItems()方法的addItems(int)的定义:

private void addItems(int loc)
    {
        listingPanel lists = new listingPanel("Shashlik", Convert.ToString(20), Convert.ToString(2));
        listing.enterItems(lists, loc);
    }

这是调用addItems(int)方法的事件:

private void sellBtn_Click(object sender, EventArgs e)
    {
        //for (int i = 0; i<1000; i = i+52)
            addItems(0);
    }

提前致谢:)

1 个答案:

答案 0 :(得分:1)

首先,您将一个项目添加到列表中,然后您希望将其相对于上一个项目进行定位。

但是,由于您在 new 项添加到列表后获得了最后一项的索引,因此您实际上是相对于本身定位项< / EM>!

注意:如果您尝试通过在添加项目之前添加1899-12-30 来解决问题,那么它当然会因为int lastIndex = items.Count - 1而引发异常,所以您将拥有以某种其他方式为第一项提供Y位置。