Список окон MDI не обновляет дочерние текстовые строки заголовка - PullRequest
3 голосов
/ 28 августа 2009

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

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

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

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

  • Обновление () в главном меню.
  • Обновить () в главном меню.
  • Invalidate () в окне MenuStrip
  • Invalidate () для одного из элементов списка окон во время выполнения
  • Переключение состояния Checked дважды на один из элементов списка окон во время выполнения

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

Ответы [ 3 ]

8 голосов
/ 28 августа 2009

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

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

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

Спасибо!

2 голосов
/ 28 августа 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

0 голосов
/ 02 декабря 2011

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

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

...