Переключение между двумя активными окнами

  • Автор темы Автор темы mexan
  • Дата начала Дата начала
Сообщения
202
Реакции
0
Да, использование ifrm.Show(); открывает новую форму в C# Windows Forms, но важно понимать поведение этого подхода при разных сценариях.

Как работает ifrm.Show();?
При создании нового экземпляра формы и вызове Show();:
Код:
VideoWindow ifrm = new VideoWindow();
ifrm.Show();
  • Открывается новое окно VideoWindow.
  • Главное окно (из которого вызывается метод) остаётся активным.
  • Можно переключаться между окнами.

Такое поведение подходит для случаев, когда нужно открыть несколько активных окон одновременно. Но есть проблема: При каждом вызове new VideoWindow() создаётся новый объект формы. Если метод вызван несколько раз, появится несколько окон VideoWindow.

Решение — использовать единственный экземпляр формы:
Код:
private VideoWindow ifrm;

private void OpenVideoWindow()
{
    if (ifrm == null || ifrm.IsDisposed)
    {
        ifrm = new VideoWindow();
    }
    ifrm.Show();
    ifrm.BringToFront();
}

Что делает этот код?
  • Проверяет, создана ли уже форма ifrm == null или ifrm.IsDisposed.
  • Если нет — создаёт новую.
  • Если форма уже создана — просто показывает и выводит её на передний план.

Если нужна форма как диалог (Modal окно)
Если нужно, чтобы при открытии формы нельзя было взаимодействовать с другими окнами приложения:
Код:
ifrm.ShowDialog();

В этом случае ifrm блокирует доступ к остальным окнам, пока не будет закрыта.

Вывод
  • Используйте Show();, если хотите несколько активных окон.
  • Для одного экземпляра используйте проверку if (ifrm == null).
  • Если нужно блокировать главную форму, вызывайте ShowDialog();.
 
Назад
Сверху