【问题标题】:Removing the default MDI menu of a MDI Container form when a MDI Child is maximized最大化 MDI 子项时删除 MDI 容器窗体的默认 MDI 菜单
【发布时间】:2009-06-11 08:54:50
【问题描述】:

我正在开发一个 .NET C# 应用程序,该应用程序的主窗体是 MDI 容器。当用户最大化 MDI 子项时,Windows 会在容器窗体的标题栏下方绘制一个控制条,其中包含子项的图标和右侧的系统按钮。基本上,我需要的是隐藏此条并使用自定义控件来提供相同的功能。

有什么方法可以阻止 Windows 绘制这个 MDI 条吗?

【问题讨论】:

  • 碰巧,你在这方面有什么进展吗?这也困扰着我,我正在考虑打开一个悬赏问题以得到答案。如果您仍然没有答案,我会提出一个新的赏金问题。

标签: c# .net menu mdi childwindow


【解决方案1】:

实际上,我找到了一种简单而有趣的方法来从我的表单中删除这个东西,方法是为表单的 MainMenuStrip 属性分配一个虚拟的 MenuStrip 控件(而不将它放在表单的 Controls 集合中):

private void OnForm_Load(object sender, EventArgs e)
{
    this.MainMenuStrip = new MenuStrip();
}

这可以防止绘制默认 MDI 标题,因为表单将其功能委托给其默认菜单条(如果有)。由于 MenuStrip 控件不在 Form 的 Controls 集合中,因此它也不可见,因此它只是用作一个虚拟菜单,用于在子项最大化时隐藏讨厌的 MDI 菜单。

【讨论】:

  • 您,先生,是个天才。如果可以的话,我会 +42。
【解决方案2】:

多年前的这段对话表明没有办法做到这一点,他最终在主窗体上使用了用户控件,而不是实际使用 MDI 界面:

http://answers.google.com/answers/threadview/id/135136.html

我可以在网上找到的所有其他线程要么被放弃而没有答案,要么死路一条。我无法相信这个功能如此繁琐而且不是原生可用的。

【讨论】:

    【解决方案3】:

    有一种比将代码添加到每个表单的 Load 事件更简单的方法。只需将此代码放在 MdiParent 表单中,然后将 MenuStrip 替换为您用于 menustrip 控件的实际名称。

    Private Sub MenuStrip_ItemAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemEventArgs) Handles MenuStrip.ItemAdded
            Dim s As New String(e.Item.GetType().ToString())
            If s = "System.Windows.Forms.MdiControlStrip+SystemMenuItem" Then
                e.Item.Visible = False
            End If
        End Sub
    

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2020-05-31
      相关资源
      最近更新 更多