Закрити form1, відкрити form2 - stack overflow російською

У проекті WinForms є два види форм - головна і дочірні. Різниця між ними в тому, що головна форма по суті і є додатком, тому при її закритті відбувається вихід з програми.

Одним з рішень є приховування головної форми, замість закриття. Цей варіант вже написаний в питанні. Він зазвичай застосовується, коли головна форма так чи інакше використовується в подальшому.

Якщо перша форма в подальшому не використовується, то можна використовувати 2 варіанти:

За умовчанням вміст файлу Program.cs виглядає так:

Як ви можете помітити, Form1 запускається як додаток і, при завершенні роботи форми, відбудеться вихід з Main і додатки.

Щоб цього не сталося, можна прописати послідовність запуску форм:

Тоді при закритті першої форми, буде викликана друга і так до останньої.

Недолік - складно передавати дані між формами. Так можна визначити поля в класі Program. конструктори з параметрами в формах і передавати дані через ці поля і параметри конструкторів, але що робити якщо потрібно повернутися в одну з попередніх форм? Пиляти складну логіку переходів в Main - не як найкраща ідея, м'яко кажучи.

2. Переходимо від форм до контролю

У WinForms є чудовий клас UserControl. Це фактично порожній контрол, який ви можете наповнити будь-яким вмістом як і форму.

Після того, як набір таких контролів підготовлений, вам залишається тільки розмістити їх на формі з параметром Dock = DockStyle.Fill і керуючи значенням властивості Conrol.Visible. показувати той контрол, який вам потрібен в даний момент. Якщо не хочете тримати контрол в пам'яті, ні хто не заважає просто створювати його в потрібний момент і відображати, а після використання і перемикання на новий контрол, відписатися від подій, викликати Dispose (). видалити всі посилання і віддати його на розтерзання збирачеві сміття. Тільки виграш від цього невеликий, особливо якщо раптом надумаєте знову його показати.

Забув написати про ще один недолік перемикання між формами через Main. Кожна нова форма буде відкриватися трохи в іншому місці, може для захисту від програм-Автокликер це і добре, але мене, як користувача, така поведінка дратує, і думаю що не тільки мене.