【问题标题】:Visual style of child form TitleBar different from main form子窗体TitleBar与主窗体不同的视觉风格
【发布时间】:2012-12-16 12:29:10
【问题描述】:

我正在向一个主窗体添加几个子窗体。在 XP 中,父/子的标题栏似乎是相同的,除了关闭按钮是黑色的,而不是红色的。但在 Windows 7 中,如图所示,子窗体标题栏与主窗体不同。

如何解决这个问题? 最重要的是颜色。但是想在这里了解颜色和样式的全部限制。

主窗体有

IsMdiContainer = 假

通过

添加子表单
var f = new ChildForm(); 
clientPanel.Controls.Add(f); 
f.TopLevel = false; 
f.BringToFront(); 
f.Show(); 

我不认为使用 IsMdiContainer = true 是一种选择。我不记得为什么,因为它是很久以前的事了,但我认为存在无法隐藏表单边框的问题,这是我需要的。

【问题讨论】:

    标签: c# winforms windows-7 titlebar


    【解决方案1】:

    这是完全正常的。当您将 Form.TopLevel 属性设置为 false 时,窗口将不再像顶级窗口那样运行。它变成了一个子控件,行为几乎与 UserControl 没有区别。除了您忘记更改 FormBorderStyle 属性外,它仍然打开了“我想要一个标题”和“我想要一个可调整大小的边框”样式标志。

    哪些窗口将按要求呈现,但不再使用顶级窗口的视觉样式。后备是经典的外观。

    这不是唯一出错的地方,表单也失去了被激活的能力。由于子控件没有激活状态,因此只有顶层窗口有。所以它不再正确地绘制标题,它总是使用“未激活”颜色绘制,即使您将焦点设置到表单。另一个严重的问题是拖动标题栏功能仍然有效,允许用户将窗口移动到父窗口之外,而无法返回。

    唯一合理的解决方案是将 FormBorderStyle 设置为 None,这样这些事情就不会出错。

    如果您打算创建自己的 MDI 样式窗口模型但没有 MDI 丑陋,那么这不是一个好的解决方案。看对接库,微芬罗的免费DockPanel Suite很受欢迎。

    【讨论】:

    • 谢谢,好信息!我知道这不是问题的行为。我有自己的自定义解决方案,用于调整大小、对齐边缘、焦点、保存/加载等。标准 FormBorderStyle 是无,所以我只是为了移动、最大化/最小化和关闭而显示标题栏。所以我可以忍受非标准的颜色,而不是改变这一切。如果是理解标题栏渲染不能被覆盖..?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多