如何在自动滚动面板中动态重新定位控件?

时间:2014-05-19 08:50:33

标签: c# user-controls scroll position

我有一个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;
}

这是删除数据集后面板的屏幕截图:

enter image description here

如果能算出我需要的初始Y值,似乎一切都会好的。我试过0,它不起作用,我尝试从顶部元素中拉回Y值,但是当你删除第0个数据集时,这会中断。

这样做的正确方法是什么?

0 个答案:

没有答案