I need a multiline TextBox which is always disabled, but it shouldn't paint itself in gray, but I want to keep its designer choosen color.
I previously had the same requirement with an always-black Label (no multiline) and so I inherited from Label like:
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
That works fine. Now I want the same thing but with a multiline label, so I chose to inherit from 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
Now the Paint event is never fired in the CustomControl1 - TextBox inherited - control.
Why can't I get the Paint event?
Also, if I want to make the Enabled property invisible and not-settable by the user, I do:
<Browsable(False), DefaultValue(False)> Public Overloads Property Enabled As Boolean Get Return False End Get Set(ByVal value As Boolean) End Set End Property
But this way, neither I can set the "real" Enabled property, I mean the backing field.