Я динамически заполняю панель таблицей и добавляю в таблицу несколько строк, столбцов, изображений и лабораторных работ на основе количества подключенных мониторов. Каждый раз, когда панель «Мониторы» открывается, динамически добавленные элементы управления удаляются, а затем повторно добавляются снова, если любые настройки были изменены с момента последнего открытия. Когда панель загружается в первый раз, это то, как он появляется:C# - Динамическое рисование таблицы и содержимого приводит к дополнительной строке
Это просто, как я хочу, чтобы отобразить. Оба монитора обнаружены и указаны правильные разрешения. Теперь, когда панель Наставники будет перемещаться от, затем переключился обратно (запуская содержимое таблицы должны быть удалены и повторно добавлены), он отображает с дополнительной строкой и старой этикеткой, как так:
Независимо от того, сколько раз панель перемещается от и обратно, она всегда отображается правильно при первом открытии, а затем неправильно в любое время после. Вот мой код для заполнения панели:
public void monitorPanel_Paint()
{
// Remove existing monitor pictures
foreach (Control item in monitorLayoutPanel.Controls.OfType<PictureBox>())
{
monitorLayoutPanel.Controls.Remove(item);
item.Dispose();
}
// Remove existing monitor labels
foreach (Control item in monitorLayoutPanel.Controls.OfType<Label>())
{
monitorLayoutPanel.Controls.Remove(item);
item.Dispose();
}
// Get number of attached monitors
int screens = Screen.AllScreens.Count();
// Auto add a table to nest the monitor images and labels
this.monitorLayoutPanel.Refresh();
this.monitorLayoutPanel.ColumnStyles.Clear();
this.monitorLayoutPanel.RowStyles.Clear();
this.monitorLayoutPanel.ColumnCount = screens;
this.monitorLayoutPanel.RowCount = 2;
this.monitorLayoutPanel.AutoSize = true;
int z = 0;
foreach (var screen in Screen.AllScreens.OrderBy(i => i.Bounds.X))
{
var percent = 100f/screens;
this.monitorLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, percent));
PictureBox monitor = new PictureBox
{
Name = "MonitorPic" + z,
Size = new Size(95, 75),
BackgroundImageLayout = ImageLayout.Stretch,
BackgroundImage = Properties.Resources.display_enabled,
Anchor = System.Windows.Forms.AnchorStyles.None,
};
Label resolution = new Label
{
Name = "MonitorLabel" + z,
TextAlign = ContentAlignment.MiddleCenter,
Font = new Font("Segoe UI", 10),
ForeColor = Color.Black,
BackColor = Color.Transparent,
Text = screen.Bounds.Width + "x" + screen.Bounds.Height,
Anchor = System.Windows.Forms.AnchorStyles.None,
};
this.monitorLayoutPanel.Controls.Add(monitor, z, 0);
this.monitorLayoutPanel.Controls.Add(resolution, z, 1);
z++;
}
}
Это сделал трюк, плюс я узнал кое-что! Спасибо за вашу помощь. :) – Rawns