Dieses Verfahren füllt ein Rechteck mit abgerundeten Ecken auf einem Grafikobjekt (VB-Code):
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
diese Funktion aufzurufen, um die Farbe des Ereignisses picturebox Griff und der e.Graphics als erstes Argument Objekt übergeben, und die Begrenzungen der Bildbox als zweites Argument, wenn das Rechteck Ihre Bildbox vollständig füllen soll.
Der d-Parameter ändert sich der Winkel Ecken, ich habe es mit einem Wert von 30 aufrufen, können Sie verschiedene Werte versuchen ...
Auch hier ist ein Code (statt fill) ein abgerundetes Rechteck zu zeichnen:
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 vielen Dank für Ihren Blitz anwser! : D Der Code funktioniert sehr gut. Nur eine weitere Frage, wie kann ich tun, wenn ich es nicht sofort malen möchte, sondern nur, wenn die Anwendung in einem bestimmten Zustand ist? Sollte ich auch in diesem Fall das Paint-Event verwenden? – Drake
Sie könnten einen booleschen Wert in Ihrer Klasse haben (sagen wir mustPaint), den Sie setzen, wenn das Rechteck gezeichnet werden soll. Dann können Sie eine Bedingung im Paint-Ereignis hinzufügen: Wenn mustPaint dann [gerundetes Rechteck hier malen] endet wenn –
ok, ich werde es versuchen, danke – Drake