О PropertyStore и MDI дочерняя форма - PullRequest
3 голосов
/ 13 июля 2009

Это вопрос .net WinForm о настройке MDI.

Когда основная форма создает дочернюю форму MDI, основная форма PropertyStore содержит ссылку на дочернюю форму MDI. Интересно, приведет ли это к тому, что детская форма будет живой, даже если она закрыта? Если да, что мне делать при утилизации детской формы, чтобы удалить эту ссылку?

Дочерняя форма вызывается примером кода:

//The code is in the main form.
var f = new FormMDIChild();
f.MdiParent = this;
f.Show();

Ответы [ 2 ]

7 голосов
/ 08 октября 2009

Для справки, решение, предлагаемое в ссылочном посте, работает (хотя и немного рискованно). Однако утечка также исчезает, если вы открываете и закрываете другую дочернюю форму, кажется, что родительский элемент MDI пропускает только последний открытый дочерний элемент.

Если вы хотите устранить утечку, используя обходной путь, упомянутый в ссылочном посте, просто переопределите метод OnMdiChildActivate MDIParent ...

protected override void OnMdiChildActivate(EventArgs e)
{
    base.OnMdiChildActivate(e);

    typeof(Form).InvokeMember("FormerlyActiveMdiChild", 
        BindingFlags.Instance | BindingFlags.SetProperty |
        BindingFlags.NonPublic, null, this, new object[] { null });
}
2 голосов
/ 14 августа 2009

У меня похожая проблема. Я нашел это сообщение на форуме , в котором обсуждается проблема и предлагается решение, однако я не уверен, было ли это свойство удалено в последних пакетах обновления, так как не могу найти свойство с помощью отражения, поэтому решение не найдено. не работает на меня. Я буду смотреть по сторонам и сообщать, найду ли я другое решение.

...