Список окон MDI не обновляет текст дочерней строки заголовка

У меня есть контейнерная форма MDI и некоторые дочерние формы, которые самостоятельно обновляют текст в строке заголовка. После изменения свойства Text в дочерней форме новый текст строки заголовка из дочерней формы не обновляется в меню списка окон при открытии меню. Это автоматически сгенерированный список окон, предоставляемый .NET через свойство MdiWindowListItem.

Изменение распространяется только тогда, когда другое событие физически изменяет список окон (открытие нового дочернего элемента, закрытие дочернего элемента, переключение на другого дочернего элемента).

Есть ли способ принудительно обновить список окон программно? У меня уже есть код для включения / отключения меню одновременно с изменением текста строки заголовка дочернего элемента.

Я безуспешно пробовал следующее:

  • Update () в главном MenuStrip
  • Refresh () в главном MenuStrip
  • Invalidate () в окне MenuStrip
  • Invalidate () для одного из элементов списка окон во время выполнения
  • Дважды переключение состояния Checked для одного из элементов списка окон во время выполнения

Похоже, что нет никаких других удаленно жизнеспособных функций для вызова элемента меню, его родительского ToolStrip или родительской формы, содержащей систему меню.


person Jon Seigel    schedule 28.08.2009    source источник


Ответы (3)


Вышеупомянутое решение не сработало для меня. Но я перешел по ссылке и нашел это, которое отлично работает:

private void windowMenu_DropDownOpening(object sender, EventArgs e)
{
    if (this.ActiveMdiChild != null)
    {
        Form activeChild = this.ActiveMdiChild;

        ActivateMdiChild(null);
        ActivateMdiChild(activeChild);
    }
}

Спасибо!

person Jon Seigel    schedule 28.08.2009

Вам нужно добавить событие TextChanged в дочернюю форму с помощью этого обработчика:

private void childForm_TextChanged(object sender, EventArgs e) {
    this.ActivateMdiChild( null );
    this.ActivateMdiChild( sender as Form );
} 

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/a36b89aa-57aa-48b5-87a6-49fbddc9c92d

person MiffTheFox    schedule 28.08.2009

Вместо того, чтобы активировать / деактивировать, вы можете послать сообщение WM_MDIREFRESHMENU клиенту MDI (не фрейму) при изменении заголовка окна.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644919%28v=VS.85%29.aspx.

person Savas Alp    schedule 02.12.2011