【问题标题】:MDI window list not updating child title bar textsMDI 窗口列表不更新子标题栏文本
【发布时间】:2010-11-23 18:44:11
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: c# winforms menu mdi


    【解决方案1】:

    上述解决方案对我不起作用。但我点击了链接,发现了这个,效果很好:

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

    谢谢!

    【讨论】:

      【解决方案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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多