enutzerdefiniertes @ vb .NET-Steuerelement, das von TextBox erbt, löst Paint-Ereignis @ nicht a

Ich benötige eine mehrzeilige TextBox, die immer deaktiviert ist, sich aber nicht in Grau ausmalen sollte, sondern die vom Designer gewählte Farbe beibehalten möchte.

Ich hatte zuvor die gleiche Anforderung mit einem immer schwarzen Etikett (kein mehrzeiliges Etikett) und daher habe ich von Label Folgendes geerbt:

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

Das funktioniert gut. Jetzt möchte ich dasselbe, aber mit einem mehrzeiligen Label, also habe ich beschlossen, von TextBox zu erben:

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

Nun wird das Paint-Ereignis im geerbten CustomControl1-TextBox-Steuerelement ausgelöst.

Warum kann ich das Paint-Ereignis nicht abrufen?

Auch wenn ich die Enabled-Eigenschaft für den Benutzer unsichtbar und nicht einstellbar machen möchte, mache ich Folgendes:

<Browsable(False),
DefaultValue(False)>
Public Overloads Property Enabled As Boolean
    Get
        Return False
    End Get
    Set(ByVal value As Boolean)
    End Set
End Property

Aber auf diese Weise kann ich die Eigenschaft "real" Enabled nicht festlegen, ich meine das Hintergrundfeld.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage