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

Board index Программирование .NET

Description: Программирование с использованием платформы Microsoft.NET

#1by mexan » 08.02.2025, 21:52

Да, использование ifrm.Show(); открывает новую форму в C# Windows Forms, но важно понимать поведение этого подхода при разных сценариях.

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

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

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

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

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

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


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

Вывод
  • Используйте Show();, если хотите несколько активных окон.
  • Для одного экземпляра используйте проверку if (ifrm == null).
  • Если нужно блокировать главную форму, вызывайте ShowDialog();.
Image
mexan
Администратор
Reputation: 0
Posts: 167
Topics: 129

Return to .NET