Этот метод заполняет прямоугольник с закругленными углами на графический объект (код VB):
Public Sub FillRoundedRectangle(ByVal g As Drawing.Graphics, ByVal r As Rectangle, ByVal d As Integer, ByVal b As Brush)
Dim mode As Drawing2D.SmoothingMode = g.SmoothingMode
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed
g.FillPie(b, r.X, r.Y, d, d, 180, 90)
g.FillPie(b, r.X + r.Width - d, r.Y, d, d, 270, 90)
g.FillPie(b, r.X, r.Y + r.Height - d, d, d, 90, 90)
g.FillPie(b, r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90)
g.FillRectangle(b, CInt(r.X + d/2), r.Y, r.Width - d, CInt(d/2))
g.FillRectangle(b, r.X, CInt(r.Y + d/2), r.Width, CInt(r.Height - d))
g.FillRectangle(b, CInt(r.X + d/2), CInt(r.Y + r.Height - d/2), CInt(r.Width - d), CInt(d/2))
g.SmoothingMode = mode
End Sub
вызывать эту функцию, обрабатывающий событие краской PictureBox и передать e.Graphics объект в качестве первого аргумента, и рамки изображения в качестве второго аргумента, если вы хотите, чтобы прямоугольник полностью заполнил ваш блок изображения.
Параметр d изменяет угол по углам, я называю его со значением 30, вы можете попробовать различные значения ...
Кроме того, здесь какой-то код, чтобы нарисовать (вместо заливки) скругленный прямоугольник:
Public Sub DrawRoundedRectangle(ByVal g As Drawing.Graphics, ByVal r As Rectangle, ByVal d As Integer, ByVal p As Pen)
g.DrawArc(p, r.X, r.Y, d, d, 180, 90)
g.DrawLine(p, CInt(r.X + d/2), r.Y, CInt(r.X + r.Width - d/2), r.Y)
g.DrawArc(p, r.X + r.Width - d, r.Y, d, d, 270, 90)
g.DrawLine(p, r.X, CInt(r.Y + d/2), r.X, CInt(r.Y + r.Height - d/2))
g.DrawLine(p, CInt(r.X + r.Width), CInt(r.Y + d/2), CInt(r.X + r.Width), CInt(r.Y + r.Height - d/2))
g.DrawLine(p, CInt(r.X + d/2), CInt(r.Y + r.Height), CInt(r.X + r.Width - d/2), CInt(r.Y + r.Height))
g.DrawArc(p, r.X, r.Y + r.Height - d, d, d, 90, 90)
g.DrawArc(p, r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90)
End Sub
эй Мета -Наношь, спасибо большое за твою молнию! : D Код работает очень хорошо. Еще один вопрос, как я могу это сделать, если я не хочу рисовать его немедленно, но только тогда, когда приложение находится в определенном состоянии? Должен ли я использовать в этом случае событие Paint? – Drake
Вы можете иметь логическое значение в своем классе (предположим, это называется mustPaint), которое вы задаете, когда хотите, чтобы прямоугольник был нарисован, тогда вы могли бы добавить условие в событие Paint: , если mustPaint затем [нарисовать закругленный прямоугольник здесь] end if –
ok, я попробую, спасибо – Drake