Przejście między formami

0

Jak najlepiej zaimplementować przejście między formami ? Bo mam z wykorzystaniem wątków, ale nie wiem czy to opłaca się za każdym razem odpalać apkę od nowa.

Bo próbowałem tak

public void ChangeWindow(){
Thread th = new Thread(Test);
th.Start();
this.Close();
}
public void Test(){
Application.Run(new Form2());
}

i tak

Form2 form = new Form2();
form.Show();
this.Hide();

I sam już nie wiem.

1

Zdecydowanie sie nie oplaca.
Jesli druga ma "przykryc" pierwsza to wystarczy new form2.showdialog(). Jesli nie to Show(). Jesli jest kilka to moze mdi.

0

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.

1

Ale masz jakiś istotne powód, żeby podmieniać aplikacji główne okno? Te formy to są ZUPEŁNIE niezależne logicznie? Co jest takiego złego w Form1, że chcesz koniecznie ją zabić przy pokazaniu Form2?

W życiu się nie spotkałem z takim przypadkiem, żebym chciał/musiał aż tak kombinować.
jedyny "zysk"jest taki, że app się zamknie po zamknięciu Form2.

To nie wystarczy?

w Form1 na przycisku
Hide()
new Form2().ShowDialog();
Show();

w Form2 na przycisku
Close();

1 użytkowników online, w tym zalogowanych: 0, gości: 1