Простой обходной путь - установить для кнопки FlatAppearance.BorderColor
значение Parent.BackColor
. перезапишет прямоугольник фокуса.Событие MouseUp
может использоваться для установки значения, оно будет вызвано до открытия нового окна (событие Control.Leave
никогда не будет вызвано):
Private Sub SomeButton_MouseUp(sender As Object, e As MouseEventArgs) Handles SomeButton.MouseUp
Dim ctl As Button = DirectCast(sender, Button)
ctl.FlatAppearance.BorderColor = ctl.Parent.BackColor
End Sub
Использование события Control.Paint
мы также можем использовать свойство Control.BackColor
для рисования границы, как с помощью метода ControlPaint class DrawBorder
(проще, чем использование ButtonRenderer class):
Private Sub SomeButton_Paint(sender As Object, e As PaintEventArgs) Handles SomeButton.Paint
Dim ctl As Button = DirectCast(sender, Button)
ControlPaint.DrawBorder(e.Graphics, ctl.ClientRectangle, ctl.BackColor, ButtonBorderStyle.Solid)
End Sub
и нарисуйте границу элемента управления самостоятельно:
(Обратите внимание, что размер ClientRectangle
должен быть уменьшен на 1 пиксель, как в Width
, так и Height
размерах. Это специально).
Private Sub SomeButton_Paint(sender As Object, e As PaintEventArgs) Handles SomeButton.Paint
Dim ctl As Control = DirectCast(sender, Control)
Dim r As Rectangle = ctl.ClientRectangle
Using pen As Pen = New Pen(ctl.BackColor, 1)
e.Graphics.DrawRectangle(pen, r.X, r.Y, r.Width - 1, r.Height - 1)
End Using
End Sub