C# Windows 8,不带标题栏的窗体,覆盖边框颜色

C# Windows 8,不带标题栏的窗体,覆盖边框颜色,c#,vb.net,winforms,forms,themes,C#,Vb.net,Winforms,Forms,Themes,我创建了一个表单,通过将ControlBox属性设置为false,将Text属性设置为“”,禁用了标题栏。FormBorderStyle属性的大小相当大。 这是表单的设计器代码: ' “frmParameters ' Me.AutoScaleDimensions=新系统.Drawing.SizeF(6.0!13.0!) Me.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font Me.BackColor=System.Drawing.Colo

我创建了一个表单,通过将
ControlBox
属性设置为false,将
Text
属性设置为“”,禁用了标题栏。
FormBorderStyle
属性的大小相当大。 这是表单的设计器代码:

'
“frmParameters
'
Me.AutoScaleDimensions=新系统.Drawing.SizeF(6.0!13.0!)
Me.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font
Me.BackColor=System.Drawing.Color.DeepSkyBlue
Me.ClientSize=新系统.Drawing.Size(284261)
Me.ControlBox=False
Me.Name=“frmParameters”
表单作为MDI子级创建。下图显示了结果(表单处于活动状态):

如您所见,窗体具有深灰色边框颜色。这不符合我的应用程序的主题。 我相信这个颜色是由当前的Windows主题设置的。当窗体处于非活动状态时,边框颜色为浅蓝色。 有没有办法覆盖这些颜色设置?我不能亲自绘制边框,因为它在客户端区域之外,我不想将边框样式设置为任何固定状态,因为表单应该仍然是可伸缩的

VB.NET和C#中的答案都非常受欢迎

这是在Windows 8.1中运行的。这是一个WinForms应用程序

解决方案1
由于未激活的颜色非常适合我的主题,我尝试在MDI应用程序中禁用子窗体的激活。 为此,我创建了一个大小为1,1的重影表单,然后处理了主表单的
MDIChildActivated
事件:

Private Sub frmMain_MdiChildActivate(sender As Object, e As EventArgs) Handles MyBase.MdiChildActivate
    frmGhost.Activate()
End Sub

这将阻止其他表单处于活动状态,但这是一个相当肮脏的黑客行为。有更好的办法吗?设置可选择的
样式并不能阻止它。

谷歌搜索显示更改表单边框颜色非常困难

我能为您提供的最好服务是:

  Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
  End Sub

  Private Sub Form1_LostFocus(sender As Object, e As EventArgs) Handles Me.LostFocus
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
  End Sub

边框仅在窗体处于活动状态时显示。

我现在所做的是使用无边框窗体并手动添加调整大小功能

我不会重复整个调整大小的代码,只是看看链接

然后,我将窗体的填充设置为每边5,并通过覆盖OnPaint自己绘制边框。这足以满足我的需要

重要的步骤是将表单的
DoubleBuffered
ResizeRedraw
属性都设置为True,以便在重写OnPaint时进行良好的重新绘制