我有一个表单,其属性 FormBorderStyle 设置为“无”,顶部有一个自定义栏,用于拖动和按钮。
现在我想给表单一个边框,因为它是一个子表单,并且父表单与子表单具有相同的背景颜色,因此很难看到子表单。不,我不能/不会改变背景颜色。
帮助
我有一个表单,其属性 FormBorderStyle 设置为“无”,顶部有一个自定义栏,用于拖动和按钮。
现在我想给表单一个边框,因为它是一个子表单,并且父表单与子表单具有相同的背景颜色,因此很难看到子表单。不,我不能/不会改变背景颜色。
帮助
有一种方法不需要设置背景图像和/或固定大小的表单。所以这是我猜的最合适和最简单的方法。假设您有一个名为 的表单Form1
,您需要做的就是:
Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Black, ButtonBorderStyle.Solid)
End Sub
另一种方法是,如果您想使用 Windows 版本提供的默认边框:
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
Me.Text = ""
Me.ControlBox = False
End Sub
您可以使用可以在此处下载的Visual Basic .NET Power Packs。它有这个控件,你可以把它放在你的无边框表单的边缘,就像我目前正在开发的这个程序一样。LineShape
北边界只是 aLineShape
设置BorderWidth
为60
,其他边界BorderWidth
设置为10
。
BackgroundImage
也许您可以在边框中使用透明的。
您可以在表单绘制事件中使用它:
ControlPaint.DrawBorder(e.Graphics, Me.ClientRectangle, Color.Black, ButtonBorderStyle.Solid)
这将仅绘制客户端边框,如果您正在调整表单大小,或Me.Refresh()
在表单调整大小事件中最大化表单使用,以便表单重绘其边框。
在看到GD的答案后,我对表格上的TableLayouPanel做了同样的事情:
Private Sub TableLayoutPanel1_Paint(sender As Object, e As PaintEventArgs) Handles TableLayoutPanel1.Paint
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.DarkOrange, ButtonBorderStyle.Solid)
End Sub