我想为我自己的项目制作一个自定义的单选按钮控件。我希望这个控件上有自定义指示器(因为常规单选按钮指示器是一个点。它很无聊:D)并且指示器是一个字符串,因为我将使用字形字体。
我已经尝试继承控件并使用自定义 Paint 方法,但我得到的是这样的。我的代码是这样的
Public Class Component1
Inherits RadioButton
Private Icons As String = "ABC XGTDJS"
Private Captions As String
Dim x As New Font("Segoe UI", 10)
Dim y As New SolidBrush(Color.Black)
Dim z As New Point(0, 0)
Private Sub Component1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
e.Graphics.DrawString(Icons, x, y, z)
End Sub
End Class
使用
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.DrawString(Icons, x, y, z)
SetStyle(ControlStyles.UserPaint, True)
End Sub
也有同样的效果。
所以我想从头开始做这个控制。我的问题是:
对不起,如果我的英语不好:D
无需从头开始,您只是缺少一些东西:
该Paint
事件由该OnPaint
方法引发,因此您的第一个示例将始终绘制常规单选按钮。对此你无能为力。
但是,在您的第二个示例中,您明确告诉它绘制原始单选按钮:
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
...
End Sub
通过调用,MyBase.OnPaint()
您实际上是在调用该RadioButton.OnPaint()
方法(因为您的控件是从它继承而来的,它的基数是RadioButton
),这将导致绘制原始单选按钮。
删除那个电话,你应该很高兴。另外,不要SetStyle()
每次绘制时都调用,您只需要在构造函数中调用它(但是现在您根本不需要调用它,因此只需将其删除)。
话虽如此,您的OnPaint
方法应该如下所示:
Protected Overrides Sub OnPaint(e As PaintEventArgs)
e.Graphics.DrawString(Icons, x, y, z)
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句