Я хочу иметь возможность показывать, скрывать или закрывать некоторые другие формы в одной форме. Идея в том, что моя программа начинается с одной формы, и есть несколько кнопок, которые будут отображать другие формы. То есть, если пользователь нажимает кнопку для вызова другой формы, эта основная форма должна быть свернута, и всякий раз, когда пользователь закрывает другую форму, эта форма возвращается в нормальное или развернутое состояние.
Код выглядит так для моей основной формы, которая контролирует другие формы (Form1.cs):
namespace MultipleForms
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/*
* I want to make a public reference to this Form1
* So that when user closes Form2 That is F2 this form will be
* set back to normal or maximized state
*/
private void buttonStartForm2_Click(object sender, EventArgs e)
{
//Declare Form2
Form2 F2 = new Form2();
//Show Form2
F2.Show();
//Minimize Form1
this.WindowState = FormWindowState.Minimized;
}
}
}
А это Form2.cs
namespace MultipleForms
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
//FormClosed event handler
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
//Closing Form2
this.Close();
//Now I need a code to make Form1 to recover from minimized
// state to normal or maximized state. how do I should refer to it?
}
}
}
Я думаю, что должен что-то сделать для события закрытия формы, но как я могу инициализировать Form1.cs как что-то публичное? или я тоже должен инициализировать Form1.cs в Form2.cs? или, может быть, это нужно сделать через файл Program.cs:
namespace MultipleForms
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
P.S .: Крайне важно, чтобы Form2 была закрытой, а не скрытой
UPDATE
Используя решение Hans, лучше всего использовать его следующим образом:
private bool isEnabledCmpFrm = false;
public void buttonStartComparisonForm_Click(object sender, EventArgs e)
{
if (!isEnabledCmpFrm)
{
ComparisonForm CmpFrm = new ComparisonForm();
CmpFrm.Show();
CmpFrm.WindowState = FormWindowState.Normal;
this.WindowState = FormWindowState.Minimized;
isEnabledCmpFrm = true;
CmpFrm.FormClosed += delegate
{
this.WindowState = FormWindowState.Normal;
isEnabledCmpFrm = false;
};
}
}