C# MDI窗口列表未更新子标题栏文本

C# MDI窗口列表未更新子标题栏文本,c#,winforms,menu,mdi,C#,Winforms,Menu,Mdi,我有一个MDI容器表单,以及一些独立更新标题栏文本的子表单。在子窗体上更改文本属性后,打开菜单时,子窗体中的新标题栏文本不会在窗口列表菜单中更新。这是.NET通过MdiWindowListItem属性提供的自动生成的窗口列表 仅当另一个事件实际更改窗口列表时(打开新子项、关闭子项、切换到另一子项),更改才会传播 有没有办法以编程方式强制更新窗口列表?我已经有一些代码,可以在更改子标题栏文本的同时启用/禁用菜单 我尝试了以下方法,但没有成功: 主菜单上的Update() 在主菜单上刷新() 窗口

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

仅当另一个事件实际更改窗口列表时(打开新子项、关闭子项、切换到另一子项),更改才会传播

有没有办法以编程方式强制更新窗口列表?我已经有一些代码,可以在更改子标题栏文本的同时启用/禁用菜单

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

  • 主菜单上的Update()
  • 在主菜单上刷新()
  • 窗口菜单上的Invalidate()
  • 在运行时使其中一个窗口列表项失效()
  • 在运行时对其中一个窗口列表项切换两次选中状态

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

您需要使用此处理程序向子窗体添加TextChanged事件:

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

上述解决方案对我不起作用。但我遵循了链接,发现了这个非常有效的方法:

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

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

谢谢大家!

当窗口标题更改时,您可以向MDI客户端(非框架)窗口发送WM_MDI刷新菜单消息,而不是激活/停用