Как добавить пользовательскую границу в форму FormBorderStyle=None -?
У меня есть форма со свойством FormBorderStyle, установленным на "Нет", и с пользовательской панелью на верхней стороне для перетаскивания и кнопок.
Теперь я хотел бы задать форму для границы, потому что это дочерняя форма, а родительская форма имеет тот же цвет фона, что и дочерняя, поэтому трудно увидеть дочернюю форму. И нет, я не могу / не буду менять цвет фона.
Помогите
5 ответов
Существует способ без необходимости устанавливать фоновое изображение и / или форму фиксированного размера. Так что это самый правильный и простой способ, я думаю. Скажем, у вас есть форма с именем 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 Pack, которые вы можете скачать здесь. Это называется этот элемент управления LineShape
что вы можете поместить на края формы без полей, как эта программа, над которой я сейчас работаю.
Северная граница - это просто LineShape
с BorderWidth
установлен в 60
и другие границы " BorderWidth
s установлены в 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