私はラベルを表すが、丸い角を持つカスタムコントロールを持っています。コントロールを作成して、デザイナーツールボックスからドラッグ&ドロップして、上端を丸めますが、テキストが消えてしまうようです。カスタムコントロールのテキストがありません
私は下部に表示されるテキストの別のカスタムプロパティを追加することができますが、テキストプロパティはすでに存在し、理想的には私はそれを使用したいと思います。私はオーバーライドプロパティを使ってそれを行うことができると思っていましたが、それはまだ表示されません。
任意の提案、私は...あなただけOnPaint
オーバーライドしていないテキストに境界線を描画している
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
おかげ
テキストを描画しているようには見えません。 – Plutonix
@Plutonix、私はそれがあなたが返事したことを知っていた!常にケースに:)。私は前にテキストを描いていましたが、塗りつぶされた矩形の下に角が丸くなっていました。少し遊んだ後、私はすべて一緒にテキストを失ったようです:/ –