我需要一个总是被禁用的多行文本框,但它不应该用灰色来绘制自己,但我想让它的设计者选择颜色。
我以前对一个总是黑的标签(没有多行)有同样的要求,所以我继承了标签,比如:
Imports System.ComponentModel
Public Class LabelDisabled
Inherits Label
Sub New()
InitializeComponent()
Enabled = False
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
' always draw it black
e.Graphics.DrawString(Me.Text, Me.Font, Brushes.Black, 0, 0)
End Sub
End Class
那很好。现在我想要相同的东西,但是有多行标签,所以我选择从文本框继承:
Imports System.ComponentModel
Public Class CustomControl1
Inherits TextBox
Sub New()
InitializeComponent()
'Paint never fires anyway
'Enabled = False
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim brush As New SolidBrush(Me.ForeColor)
e.Graphics.DrawString(Me.Text, Me.Font, brush, 0, 0)
End Sub
End Class
现在,从不在CustomControl1-文本框继承-控件中激发绘制事件。
为什么我不能参加绘画活动?
另外,如果我想使启用的属性不可见并且用户无法设置,我会:
<Browsable(False),
DefaultValue(False)>
Public Overloads Property Enabled As Boolean
Get
Return False
End Get
Set(ByVal value As Boolean)
End Set
End Property
但是这样,我也不能设置“real”启用的属性,我的意思是支持字段。