Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,054

Нужен ли Dispose для формы после вызова DialogShow

12.07.2023, 18:35. Показов 802. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
using (var form= new SomeForm()) // Нужен ли тут Using?
{
    form.ShowDialog();
}
Стаковэрфлоу цитирует с форума на MSDN
Form.Close() sends the proper Windows messages to shut down the win32 window. During that process, if the form was not shown modally, Dispose is called on the form. Disposing the form frees up the unmanaged resources that the form is holding onto.

If you do a form1.Show() or Application.Run(new Form1()), Dispose will be called when Close() is called.

However, if you do form1.ShowDialog() to show the form modally, the form will not be disposed, and you'll need to call form1.Dispose() yourself. I believe this is the only time you should worry about disposing the form yourself.

Но ссылка с которой было цитирована не рабочая и нет возможности подробно изучить этот момент
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.07.2023, 18:35
Ответы с готовыми решениями:

Не работает текстовое поле формы после вызова формы через другую форму
Добрый вечер, дорогие форумяне! вот такая незадача, есть две формы которые я вызываю по отдельности, но решила чтобы сократить время и...

Для чего нужен метод dispose()?
Для чего нужен метод dispose()? Чем можно заменить оператор & в условном операторе если в условии есть: if...

Закрытие формы после вызова медиаплеера.
Zagrygay file *.avi .(animationnyi).I pri nagatii na MediaPlayer form dolgen zakrit'sia . Kakoe dolgno bit' sobitie ? Y mena ni odno ne...

4
Эксперт .NET
 Аватар для Rius
13163 / 7722 / 1679
Регистрация: 25.05.2015
Сообщений: 23,519
Записей в блоге: 14
12.07.2023, 18:41
Лучший ответ Сообщение было отмечено anapshy как решение

Решение

Вкратце : нужен, так как такие диалоги сами не закрываются.

Подробности см. в https://learn.microsoft.com/en... ShowDialog
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
12.07.2023, 22:43
Цитата Сообщение от Rius Посмотреть сообщение
Подробности см. в https://learn.microsoft.com/en... ShowDialog
When a form is displayed as a modal dialog box, clicking the Close button (the button with an X at the upper-right corner of the form) causes the form to be hidden and the DialogResult property to be set to DialogResult.Cancel. Unlike non-modal forms, the Close method is not called by the .NET Framework when the user clicks the close form button of a dialog box or sets the value of the DialogResult property. Instead the form is hidden and can be shown again without creating a new instance of the dialog box. Because a form displayed as a dialog box is hidden instead of closed, you must call the Dispose method of the form when the form is no longer needed by your application.
набрал такой прототип на .net 7 и 4.8

C#
1
2
3
4
5
6
        private void draftButton_Click(object sender, EventArgs e)
        {
            var dialog = new Form();
            dialog.FormClosed += (_, __) => Text = "Closed!";
            dialog.ShowDialog();
        }
при закрытие по крестику -- срабатывает FormClosed (текст на главной форме меняется). В общем, я чего-то не понимаю по документации.

P.S. Отвечая на вопрос ТСа -- надо. В 99% случаем using или явный вызов Dispose для отработавшего объекта -- это как "отче наш". Черт его знает, что там под капотом, и раз разработчик предусмотрел очистку -- следует её пнуть.
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
12.07.2023, 23:13
Wolfdp, ясно же вроде все написано - форма скрывается, а значит ресурсы не освобождаются. Попробуйте такой код (сначала как есть, затем со снятым комментарием)
C#
1
2
3
4
5
var dialog = new Form();
dialog.FormClosed += (_, __) => Text += "Closed!";
dialog.ShowDialog();
//dialog.Dispose(); 
dialog.ShowDialog(); // Без Dispose() форму можно показать повторно
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
13.07.2023, 02:57
Цитата Сообщение от OwenGlendower Посмотреть сообщение
ясно же вроде все написано - форма скрывается, а значит ресурсы не освобождаются.
Про повторный вызов я как раз сразу понял. Меня смутила фраза the Close method is not called. Сейчас уже сообразил что подразумевался именно метод Close (там собственно и линка на него), а не ивенты и созвучные виртуальные методы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2023, 02:57
Помогаю со студенческими работами здесь

Присвоение экземпляру объекта значения null вместо вызова метода Dispose()
Я осуществляю загрузку определённого текстового и бинарного контента с удалённых web-ресурсов. Мне нужно предусмотреть вариант, когда...

Форма начинает глючить после добавления кнопки вызова подчиненной формы
Вот уже который раз, после попытки добавить кнопку на форму и прохождения мастера 2013 Аксесс не дает завершить мастер, выдает ошибку...

нужно чтобы функция располагалась до ее вызова, после ее вызова и в другом файле. Как это сделать?
#include <iostream> #include <conio.h> using namespace std; int n, *c; void fun(int a, int b) { for (int i = 0; i <...

После вызова печати, я хочу попасть на ту форму что вызывала, и на то поле где была до вызова
Например я в форме на каком-то поле Вызываю с формы отчет, потом закрываю отчет, и моя форма видна, но не активна, на ней нет фокуса....

оформить решение в виде функции следующими способами: 1. функция расположена после ее вызова; 2. функция расположена после до ее вызова; 3. функ
оформить решение в виде функции следующими способами: 1. функция расположена после ее вызова; 2. функция расположена после до ее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru