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