Форма диалога WinForms - закрыть или удалить?
Я унаследовал какой-то код и хотел выполнить эту модификацию всеми вами, моя задача - управление памятью.
Скажем, у меня есть "базовая" форма с пучком кнопок, которые открывают "диалоговые" формы. Каков рекомендуемый шаблон для открытия диалоговых форм? В настоящее время мы отображаем форму диалога так (в "базовом" коде формы при нажатии кнопки):
ChangePasswordForm frm = new ChangePasswordForm();
frm.ShowDialog();
Затем закройте его так (в коде формы "диалог" ):
private void bCancel_Click(object sender, EventArgs e)
{
this.Close();
//this.Dispose(); <-- this is what I am considering adding.
}
Мое объяснение для добавления Dispose заключается в том, что я беспокоюсь, если эта форма отображается и закрывается много раз, каждый раз, когда создается новый экземпляр формы и ее ресурсы никогда не выпускаются - это правильно? Кроме того, если форма имеет "закрыть" X в верхнем правом углу, должен ли я поместить вызов Dispose() в событие FormClosed?
Спасибо заранее.
Ответы
Ответ 1
Я бы использовал оператор using
:
using (var frm = new ChangePasswordForm()) {
frm.ShowDialog();
}
Объедините это с DialogResult:
private void bCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
Настройка DialogResult закроет диалоговое окно, и у вызывающего/владельца будет некоторая обратная связь.
И вам не нужно беспокоиться о Close или Dispose.
Ответ 2
В соответствии с MSDN вам нужно утилизировать в двух условиях:
Два условия, когда форма не расположена на закрытии, это когда (1) она является частью приложения с интерфейсом нескольких документов (MDI), и форма не видна; и (2) вы отобразили форму с помощью ShowDialog. В этих случаях вам нужно будет вручную вызвать Dispose, чтобы отметить все элементы управления формой для сборки мусора.
MSDN Form.Close
Объявление формы в операторе using будет подходящим способом справиться с этим.
using (ChangePasswordForm frm = new ChangePasswordForm())
{
frm.ShowDialog();
}