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.