Wymyśliłem coś takiego. Skłaniam się do rozwiązania, które przedstawił kolega wyżej, ale jeśli naprawdę na siłę chcesz to zrobić tak jak mówiłeś to można tak:
Zmodyfikuj klasę Program.cs:
static class Program
{
internal static ApplicationContext appContext;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
appContext = new ApplicationContext(new Form1()); //Tutaj tworzysz startową formę
Application.Run(appContext);
}
}
I wtedy w formie do przełączenia się między formami:
private void button1_Click(object sender, EventArgs e)
{
Form oldForm = Program.appContext.MainForm;
Program.appContext.MainForm = new Form2(); // tutaj tworzysz nową formę
Program.appContext.MainForm.Show();
oldForm.Dispose(); // posprzątajmy po pierwszej formie
}
Nie wiem jednak czy jest to optymalne rozwiązanie (wydaje się, że nie) i czy nie powoduje jakichś wycieków. Może ktoś biegły wypowie się odnośnie poprawności i jakości tego kodu.