Есть пример вопроса на видео (см. ниже).
Подскажите, как очистить panelMain в главной форме FormMain при нажатии на кнопку в FormSetting.
Проблема в том, что стирать панель можно только через кнопки в главной форме.
Код который стирает панель через кнопки внутри главной формы:
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private Form f2;
private void button1_Click(object sender, EventArgs e)
{
panelMain.Controls.Clear();
}
private void button2_Click(object sender, EventArgs e)
{
panelMain.Controls.Clear();
if (f2 == null)
{
f2 = new FormSetting();
f2.TopLevel = false;
f2.Dock = DockStyle.Fill;
}
panelMain.Controls.Add(f2);
f2.Show();
}
}
Код со второй формы FormSetting, который не работает при сворачивании приложения. Появляется ошибка: "Ссылка на объект не указывает на экземпляр объекта." в строках Application.OpenForms:
private Form f1;
private void button1_Click(object sender, EventArgs e)
{
Application.OpenForms["FormMain"].Controls["panelMain"].Controls.Clear();
if (f1 == null)
{
f1 = new FormGuid();
f1.TopLevel = false;
f1.Dock = DockStyle.Fill;
}
Application.OpenForms["FormMain"].Controls["panelMain"].Controls.Add(f1);
f1.Show();
}
Видео пример: https://www.youtube.com/watch?v=y99ENUpMlOc
Можно в метод открытия формы добавить:
f2.Tag = this;
То есть, получается следующее:
private void button2_Click(object sender, EventArgs e)
{
panelMain.Controls.Clear();
if (f2 == null)
{
f2 = new FormSetting();
f2.TopLevel = false;
f2.Tag = this;
f2.Dock = DockStyle.Fill;
}
panelMain.Controls.Add(f2);
f2.Show();
}
А из формы FormSetting можно обращаться к главной форме как (Tag as FormMain):
private Form f1;
private void button1_Click(object sender, EventArgs e)
{
(Tag as FormMain).panelMain.Controls.Clear();
if (f1 == null)
{
f1 = new FormGuid();
f1.TopLevel = false;
f1.Dock = DockStyle.Fill;
}
(Tag as FormMain).panelMain.Controls.Add(f1);
f1.Show();
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей