Ich habe ein benutzerdefiniertes Steuerelement, das ein Etikett darstellen soll, aber mit abgerundeten Ecken. Ich habe das Steuerelement so erstellt, dass es aus der Designer-Toolbox gezogen und gezogen wird, um die oberen Ecken zu runden, aber der Text scheint zu verschwinden.Custom Control Text fehlt
Ich weiß, dass ich eine weitere benutzerdefinierte Eigenschaft für den Text hinzufügen kann, die unten angezeigt wird, aber die Texteigenschaft ist bereits vorhanden und idealerweise möchte ich sie verwenden. Ich dachte, ich könnte es mit einer Override-Eigenschaft tun, aber in der Minute wird es immer noch nicht angezeigt.
Irgendwelche Vorschläge, habe ich meinen Code unten kopiert ...
Imports System.Windows.Forms.Design
Imports System.Runtime.InteropServices
Imports System.Drawing.Drawing2D
Imports System.ComponentModel
Public Class CustomControl
Inherits System.Windows.Forms.UserControl
Private m_Radius As Integer
Private m_BorderWidth As Integer
Private m_FillColor As Color
Private m_Text As String = Me.Text
Private m_Label As Label
Private components As System.ComponentModel.Container = Nothing
Public Sub New()
MyBase.BorderStyle = Windows.Forms.BorderStyle.None
End Sub
''' <summary>
''' Indicates a Radius of the control's corners
''' </summary>
''' <returns>The corner Radius.</returns>
Public Property Radius As Integer
Get
Return m_Radius
End Get
Set(value As Integer)
m_Radius = value
End Set
End Property
''' <summary>
''' Indicates the width to draw the outer border of the control.
''' </summary>
''' <returns>The border width.</returns>
Public Property BorderWidth As Integer
Get
Return m_BorderWidth
End Get
Set(value As Integer)
m_BorderWidth = value
End Set
End Property
''' <summary>
''' Indicates the outline colour of the control.
''' </summary>
''' <returns>The outline colour.</returns>
Public Property FillColor As Color
Get
Return m_FillColor
End Get
Set(value As Color)
m_FillColor = value
End Set
End Property
<Browsable(True), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
Overrides Property Text() As String
Get
Return m_Text
End Get
Set(ByVal value As String)
m_Text = value
'This line just for update
'the UI when I design to check
'if the values are saved.
MyBase.Text = value
End Set
End Property
Protected Overrides Sub onPaint(e As PaintEventArgs)
Dim rect As Rectangle = Me.ClientRectangle 'Drawing Rounded Rectangle
rect.X = rect.X + 1
rect.Y = rect.Y + 1
rect.Width -= 2
rect.Height -= 2
Using bb As GraphicsPath = GetPath(rect, Radius)
'Draw the background
Using br As Brush = New SolidBrush(FillColor)
e.Graphics.SmoothingMode = SmoothingMode.HighQuality
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear
e.Graphics.FillPath(br, bb)
End Using
'Draw the border
Using br As Brush = New SolidBrush(Color.Black)
rect.Inflate(-1, -1)
e.Graphics.SmoothingMode = SmoothingMode.HighQuality
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear
e.Graphics.DrawPath(New Pen(br, BorderWidth), bb)
End Using
End Using
End Sub
Protected Function GetPath(ByVal rc As Rectangle, ByVal r As Int32) As GraphicsPath
Dim x As Int32 = rc.X, y As Int32 = rc.Y, w As Int32 = rc.Width - 1, h As Int32 = rc.Height - 1
r = r << 1
Dim path As GraphicsPath = New GraphicsPath()
If r > 0 Then
If (r > h) Then r = h
If (r > w) Then r = w
' Top Left
path.AddArc(x, y, r, r, 180, 90)
' Top Right
path.AddArc(x + w - r, y, r, r, 270, 90)
'Bottom Right
'path.AddArc(x + w - r, y + h - r, r, r, 0, 90)
path.AddLine(x + w, y + h, x + w, y + h)
' Bottom Left
' path.AddArc(x, y + h - r, r, r, 90, 90)
path.AddLine(x, y + h, x, y + h)
path.CloseFigure()
Else
path.AddRectangle(rc)
End If
Return path
End Function
End Class
Dank
Es sieht nicht so aus, als ob Sie den Text zeichnen. – Plutonix
@Plutonix, ich wusste, du würdest antworten! Immer auf dem Fall :). Ich hatte die Textzeichnung vorher, aber unter dem gemalten Rechteck mit den abgerundeten Ecken. Nachdem ich ein bisschen herumgespielt habe, habe ich den Text anscheinend alle zusammen verloren:/ –