Przejście między formami

Przejście między formami
Kubuś Puchatek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 235
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

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

i tak

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

I sam już nie wiem.

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
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.

U8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
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:

Kopiuj
    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:

Kopiuj
        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.

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
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();

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.