Попробуйте это в классе MainForm:
private SecondaryLayoutForm secondaryLayoutForm;
private void MainForm_Resize(object sender, EventArgs e)
{
if (this.secondaryLayoutForm == null)
{
this.secondaryLayoutForm = new SecondaryLayoutForm();
}
// replace the 'this.ShouldShowSecondaryForm()' call with whatever
// your special condition is for showing the secondary form.
if (this.WindowState != FormWindowState.Minimized && this.ShouldShowSecondaryForm())
{
this.secondaryLayoutForm.Show();
}
else
{
this.secondaryLayoutForm.Hide();
}
}
Это делает MainForm ответственной за создание вашей SecondaryLayoutForm и контроль ее состояния окна - если вы этого не хотите, то подумайте о создании класса UIManager или чего-то такого, чтобы отделить это.
Обновление
Пример приложения, которое я написал с 2 формами. Это то, что в Form1, у Form2 просто есть текстовое поле, поэтому оно заметно отличается от Form1.
public partial class Form1 : Form
{
private Form2 f2;
public Form1()
{
InitializeComponent();
this.Resize += new System.EventHandler(Form1_Resize);
// Initialize Form2
f2 = new Form2();
}
void Form1_Resize(object sender, System.EventArgs e)
{
// whenever I change the size of Form1, make sure
// Form2 has the same WindowState
f2.WindowState = this.WindowState;
}
// This is your condition to either show or hide the form.
//
// Rather than a checkbox, have something that will respond to whatever
// condition you have set out - probably an event on another class.
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
{
f2.Show();
}
else
{
f2.Hide();
}
}
}
Обновление: пример того, как сделать это из другого класса
public partial class UIManager
{
private Form2 f1;
private Form2 f2;
private bool shouldShowForm2 = false;
public bool ShouldShowForm2
{
get { return shouldShowForm2; }
set { shouldShowForm2 = value; OnShouldShowForm2Changed(); }
}
public UIManager()
{
InitializeComponent();
// Initialize Forms
f1 = new Form1();
f2 = new Form2();
f1.Resize += new System.EventHandler(f1_Resize);
f1.Show();
}
void f1_Resize(object sender, System.EventArgs e)
{
// whenever I change the size of Form1, make sure
// Form2 has the same WindowState
f2.WindowState = f1.WindowState;
}
// This is your condition to either show or hide the form.
private void OnShouldShowForm2Changed(object sender, EventArgs e)
{
if (ShouldShowForm2)
{
f2.Show();
}
else
{
f2.Hide();
}
}
}
Однако, независимо от того, делаете ли вы это из одной из форм или из отдельного класса, для чего-то потребуется ссылка на обе формы, чтобы можно было синхронизировать состояния окна.