O controle personalizado do .NET vb herdado do TextBox não dispara o evento Paint
Preciso de uma caixa de texto com várias linhas sempre desativada, mas ela não deve se pintar de cinza, mas quero manter a cor escolhida pelo designer.
Anteriormente, eu tinha o mesmo requisito com um Label sempre preto (sem multilinha) e, portanto, herdei do Label como:
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
Isso funciona bem. Agora eu quero a mesma coisa, mas com um rótulo com várias linhas, então escolhi herdar do TextBox:
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
Agora, o evento Paint nunca é acionado no controle CustomControl1 - TextBox herdado -.
Por que não consigo o evento Paint?
Além disso, se eu quiser tornar a propriedade Enabled invisível e não configurável pelo usuário, eu faço:
<Browsable(False),
DefaultValue(False)>
Public Overloads Property Enabled As Boolean
Get
Return False
End Get
Set(ByVal value As Boolean)
End Set
End Property
Mas, dessa forma, nem eu posso definir a propriedade Enabled "real", quero dizer o campo de apoio.