Questo metodo riempie un rettangolo arrotondato su un oggetto grafico (codice 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
Per chiamare questa funzione, gestire l'evento vernice del picturebox e passare l'e.Graphics oggetto come primo argomento, e i limiti della casella immagine come secondo argomento se si desidera che il rettangolo riempia completamente la casella dell'immagine.
Il parametro d cambia angolo di curva, io lo chiamo con un valore di 30, si può provare diversi valori ...
Inoltre, ecco qualche codice per disegnare (invece di riempimento) un rettangolo arrotondato:
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
hey Meta -Knight grazie mille per il tuo fulmine! : D Il codice funziona molto bene. Solo un'altra domanda, come posso fare se non voglio dipingerlo immediatamente ma solo quando l'applicazione si trova in un certo stato? Dovrei usare anche in questo caso l'evento Paint? – Drake
Si potrebbe avere un valore booleano nella classe (diciamo che è chiamato mustPaint) che si imposta quando si desidera dipingere il rettangolo, quindi è possibile aggiungere una condizione nell'evento Paint: se mustPaint quindi [dipingere rettangolo arrotondato qui] fine se –
ok, ci proverò, grazie – Drake