MDI窗口列表不更新子标题栏文本

时间:2009-08-28 15:25:46

标签: c# winforms menu mdi

我有一个MDI容器表单,以及一些独立更新标题栏文本的子表单。在子窗体上更改Text属性后,打开菜单时,窗口列表菜单中不会更新子窗口中的新标题栏文本。这是.NET通过MdiWindowListItem属性提供的自动生成的窗口列表。

只有当另一个事件在物理上更改窗口列表(打开一个新孩子,关闭一个孩子,切换到另一个孩子)时,更改才会传播。

有没有办法以编程方式强制更新窗口列表?我已经有一些代码可以在孩子的标题栏文本发生变化的同时进行菜单启用/禁用。< / p>

我尝试了以下但没有成功:

  • 主MenuStrip上的Update()
  • 主MenuStrip上的Refresh()
  • MenuStrip窗口上的Invalidate()
  • 运行时其中一个窗口列表项上的Invalidate()
  • 在运行时在其中一个窗口列表项上切换Checked状态两次

似乎没有任何其他远程可行的函数来调用菜单项,其父ToolStrip或包含菜单系统的父窗体。

3 个答案:

答案 0 :(得分:8)

上述解决方案对我不起作用。但我按照链接,找到了这个,完美无缺:

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

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

谢谢!

答案 1 :(得分:2)

您需要使用此处理程序将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

答案 2 :(得分:0)

只要窗口标题发生变化,您就可以将WM_MDIREFRESHMENU消息发送到MDI客户端(非框架)窗口,而不是激活/取消激活。

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