Создавать объекты в панели и упорядочивать объекты новыми вначале не в конце

Я хочу создать вручную PictureBox и Label на горизонтальной панели, кол-во PictureBox и Label на панели Неизвестно, возможно, 200 или более или менее, я использую приведенный ниже код для этого, но сначала сталкиваюсь с двумя неприятностями : я хочу добавить новый объект, созданный в первом не в конце, например, если я создал элементы "ABCDE", которые хотите добавить на панели "EDCBA", всегда нужно, чтобы новые были первыми. Примечание: Ширина панели "230" Высота "710" Вторая проблема: В настоящее время, когда я использую панель прокрутки панели, чтобы опускаться, чем добавлять новые объекты, найдите большое свободное пространство между последним созданным объектом и новым, и если я снова прокрутил, чтобы спуститься вниз и созданный новый объект на панели имеет более большое свободное пространство.

int Right = 50, Top = 0;

 // Create Image + Text
 PictureBox pbox = new PictureBox();
 pbox.Size = new Size(140, 80);
 pbox.Location = new Point(Right, Top);
 pbox.Image = Image.FromFile("");
 Panel1.Controls.Add(pbox);


 // Create label
 Label lblPlateNOBAR = new System.Windows.Forms.Label();
 lblPlateNOBAR.Text = lblPlateNO.Text;
 lblPlateNOBAR.Location = new Point(Right + 20, Top + 80);
 Panel1.Controls.Add(lblPlateNOBAR);

 Top = Top + 150;
2 ответа

Чтобы объекты вставлялись в панель, вам необходимо переместить элементы управления, которые уже существуют в панели:

int right = 50;

// Create Image + Text
PictureBox pbox = new PictureBox();
pbox.Size = new Size(140, 80);
pbox.Location = new Point(right, 0);
pbox.Image = Image.FromFile("");

// Create label
Label lblPlateNOBAR = new System.Windows.Forms.Label();
lblPlateNOBAR.Text = lblPlateNO.Text;
lblPlateNOBAR.Location = new Point(right + 20, 80);

foreach(var control in Panel1.Controls)
{
 control.Top = control.Top + 150;
}

Panel1.Controls.Add(pbox);
Panel1.Controls.Add(lblPlateNOBAR);


Я знаю, что может показаться, что я не отвечаю на ваш вопрос, но вы тоже можете потратить немного времени, чтобы узнать мое предложение. Я не знаю, чего вы хотите достичь, но когда вы хотите сделать такую сложную программу, лучше использовать всю работу, не полагаясь на Windows Forms Controls. Попытка добавления, удаления, изменения местоположения множества элементов управления значительно снизит производительность приложения. Я предлагаю вам рисовать, например ваши фотографии, самостоятельно, используя объекты Graphics и Image и событие Paint. Также обрабатывайте такие вещи, как щелчок и выбор изображений с помощью MouseEvents. Сначала это может показаться немного трудным, но после этого вы получите гораздо лучшую производительность и гибкость. Это становится более важным, поскольку вы упомянули, что хотите разместить 200 фотографий на панели. Это также предотвращает появление мерцания, возникающего при изменении положения многих элементов управления. Хорошо отметить, что для прокрутки в этом случае вы можете поместить Panel внутри родительской Panel и использовать функцию AutoScroll только для родительской панели для обработки прокрутки. Таким образом, вам больше не нужно заботиться о прокрутке.

licensed under cc by-sa 3.0 with attribution.