Как добавить пользовательскую границу в форму 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

Северная граница - это просто LineShape с BorderWidth установлен в 60 и другие границы " BorderWidths установлены в 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
Другие вопросы по тегам