shrong> pagantanpanel.cs >
Код: Выделить всё
public partial class PaginatedPanel : UserControl
{
public int currentPage { get; set; } = 1;
public int itemsPerPage { get; } = 10;
public int pagesQt { get; set; }
private List items;
public PaginatedPanel()
{
InitializeComponent();
}
public void Add(List controls)
{
items = controls;
pagesQt = (int)Math.Ceiling((decimal)items.Count / itemsPerPage);
LoadPage(currentPage);
pgNumlbl.Text = $"{currentPage}/{pagesQt}";
}
private void LoadPage(int pageNum)
{
ClearPanel();
int startIndex = itemsPerPage * (pageNum - 1);
for (int itemNum = startIndex, numOnPage = 0; numOnPage < itemsPerPage; itemNum++, numOnPage++)
{
if (itemNum > items.Count - 1)
{
break;
}
flowLayoutPanel1.Controls.Add(items[itemNum]);
}
}
private void ClearPanel()
{
//Queue disposeQueue = new Queue();
//foreach (Control control in flowLayoutPanel1.Controls)
//{
// disposeQueue.Enqueue(control);
//}
flowLayoutPanel1.Controls.Clear();
//foreach (Control control in disposeQueue)
//{
// control.Dispose();
//}
}
private void prevBtn_Click(object sender, EventArgs e)
{
if (currentPage > 1)
{
currentPage--;
LoadPage(currentPage);
pgNumlbl.Text = $"{currentPage}/{pagesQt}";
}
}
private void nextBtn_Click(object sender, EventArgs e)
{
if (currentPage < pagesQt)
{
currentPage++;
LoadPage(currentPage);
pgNumlbl.Text = $"{currentPage}/{pagesQt}";
}
}
}
< /code>
Я протестировал его с помощью кнопок, и это работает нормально, поэтому даже миллионы загружаемых элементов управления не делайте форму для замораживания или что -то в этом роде. Но одна вещь, которую я заметил, это то, что постоянное постоянное переключение страниц увеличивает потребление оперативной памяти, я понятия не имею, почему. Он добавляет и удаляет те же элементы управления, которые хранятся в списке элементов [1]: https://i.sstatic.net/arktsp8j.png
Подробнее здесь: https://stackoverflow.com/questions/794 ... onsumption