То, что ваш ParentForm
находится внутри панели, определенно является вашей проблемой.
Если я понимаю ваш случай, у вас есть следующие элементы управления / формы:
MainForm
- это основная форма вашего приложения Panel1
- это панель, которая является элементом управления внутри MainForm
TheParentForm
- это форма, которая находится внутри Panel1
(с TopLevel
как ложным) UserControl1
- это пользовательский контроль внутри TheParentForm
ReportViewer
- это пользовательский контроль Microsoft внутри UserControl1
Когда вы закрываете MainForm
, TheParentForm
не закрывается , потому что это не форма верхнего уровня .Что вы можете сделать, это добавить следующий код в ваш MainForm
n в обработчике событий FormClosing
:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
foreach (Control ctrl in this.Panel1.Controls)
{
Form ctrlAsForm = ctrl as Form;
if (ctrlAsForm != null)
{
ctrlAsForm.Close();
}
}
}
Это перебирает все элементы управления внутри Panel1
и пытается вызвать Close()
Метод явно, если элемент управления является формой.Таким образом, закрытие основной формы также закроет формы без верхнего уровня, которые находятся внутри Panel1
.
Теперь, как вы уже писали в UserControl1
:
this.ParentForm.FormClosing += delegate
{
reportViewer.LocalReport.ReleaseSandboxAppDomain();
};
, это должно бытьХОРОШО;когда TheParentForm
будет закрыто, вы сможете провести очистку и избежать исключения.