Я бы использовал событие MdiChildActivate родительской формы MDI:
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.mdichildactivate.aspx
Обратите внимание на это замечание с этой страницы:
Это событие можно использовать для выполнения таких задач, как обновление содержимого дочерней формы MDI и изменение пунктов меню, доступных в родительской форме MDI, в зависимости от состояния активированной дочерней формы MDI. .
Также обратите внимание, что это событие также вызывается, когда дочерний элемент закрыт (из MSDN):
Происходит, когда дочерняя форма интерфейса с несколькими документами (MDI) активирована или закрыта в приложении MDI.
Это означает, что в этом случае вы могли бы сделать что-то вроде:
menuButton.Enabled = (this.MdiChildren.Length> 0);
или, если вам нужно проверить все дочерние формы для какого-либо условия, и если одному из дочерних элементов нужна активированная кнопка, включите кнопку:
void Form1_MdiChildActivate(object sender, EventArgs e)
{
foreach (Form child in MdiChildren)
{
if (IsToolbarButtonNeededForThisForm(child))
{
toolButton.Enabled = true;
break;
}
}
toolButton.Enabled = false;