我创建了一个表单,并通过将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
这会阻止其他表单处于活动状态,但这是一个相当肮脏的黑客攻击。有没有更好的办法?设置Selectable
样式不会阻止它。
答案 0 :(得分:0)
谷歌搜索显示更改表格边框颜色非常困难。
我能为您提供的最好的是:
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
边框仅在表单处于活动状态时显示。
答案 1 :(得分:0)
我现在所做的是使用无边框形式并手动添加调整大小功能。
Custom Resize Handle in Border-less Form C#
我不会重复整个调整大小的代码,只需查看链接。
然后我将表单的填充设置为每侧5,并通过覆盖OnPaint自行绘制边框。这足以满足我的需求。
重要的步骤是将表单的DoubleBuffered
和ResizeRedraw
属性设置为True,以便在重写OnPaint时获得良好的重新绘制。