我是c#的新手。我正在尝试制作一个列表,如下图所示的蓝色区域所示:
我使用了一个简单的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);
}
提前致谢:)
答案 0 :(得分:1)
首先,您将一个项目添加到列表中,然后您希望将其相对于上一个项目进行定位。
但是,由于您在将 new 项添加到列表后获得了最后一项的索引,因此您实际上是相对于本身定位项< / EM>!
注意:如果您尝试通过在添加项目之前添加1899-12-30
来解决问题,那么它当然会因为int lastIndex = items.Count - 1
而引发异常,所以您将拥有以某种其他方式为第一项提供Y位置。