我有一个C#Winforms UI,它包含许多可以添加/删除的数据集,每个数据集都有自己的控制权。
控件在自动滚动面板中相互堆叠。每当添加一个新的时,我只需将它添加到底部并将新控件的位置设置为最后一个,并且它可以正常工作。
问题是当其中一个被删除时,我想重新定位所有内容以填补空白。此时,由于滚动,位置似乎不再从0开始,所以重新定位一切都会在顶部留下很大的空隙。
这是我目前的代码:
public void DeleteDataSet(DataSet dataset)
{
int bottom = 0;
//int bottom = datasets[0].GetControl().Location.Y; //this doesn't work either!
datasets.Remove(dataset);
//Remove from panel
datasetPanel.Controls.Remove(dataset.GetControl());
//Rename remaining datasets so that the numbers are 1..Count
for (int i = 0; i < datasets.Count; i++)
{
datasets[i].SetNumber(i + 1);
}
//Reposition everything
for (int i = 0; i < datasets.Count; i++)
{
datasets[i].GetControl().Location = new Point(5, bottom);
bottom += datasets[i].GetControl().Height + 3;
}
addDatasetButton.Top = bottom + 3;
}
这是删除数据集后面板的屏幕截图:
如果能算出我需要的初始Y值,似乎一切都会好的。我试过0,它不起作用,我尝试从顶部元素中拉回Y值,但是当你删除第0个数据集时,这会中断。
这样做的正确方法是什么?