【发布时间】:2014-07-15 13:58:52
【问题描述】:
我创建了一个表单并通过将ControlBox 属性设置为false 并将Text 属性设置为“”来禁用标题栏。 FormBorderStyle 属性是相当大的。
这是表单的设计器代码:
'
'frmParameters
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.DeepSkyBlue
Me.ClientSize = New System.Drawing.Size(284, 261)
Me.ControlBox = False
Me.Name = "frmParameters"
表单被创建为 MDI-Child。下图显示了结果(表单处于活动状态):
如您所见,表单的边框颜色为深灰色。这不适合我的应用程序的主题。 我相信这个颜色是由当前的 Windows 主题设置的。当表单处于非活动状态时,边框颜色为浅蓝色。 有没有办法覆盖这些颜色设置?我自己无法真正绘制边框,因为它在客户区之外,并且我不想将 Borderstyle 设置为任何固定状态,因为表单应该仍然是相当大的。
非常欢迎 VB.NET 和 C# 的答案。
这是在 Windows 8.1 中运行的。它是一个 WinForms 应用程序。
解决方法 1
由于未激活的颜色非常适合我的主题,我尝试在 MDI 应用程序中禁用子窗体的激活。
我通过创建大小为 1,1 的 ghostform 来实现这一点,然后处理主窗体的 MDIChildActivated 事件:
Private Sub frmMain_MdiChildActivate(sender As Object, e As EventArgs) Handles MyBase.MdiChildActivate
frmGhost.Activate()
End Sub
这将阻止其他表单处于活动状态,但这是一个相当肮脏的 hack。有没有更好的办法?设置Selectable 样式并不能阻止它。
【问题讨论】:
标签: c# vb.net winforms forms themes