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();.

