Dem einen oder anderen ist es vielleicht noch nicht aufgefallen: Ein Doppelklick auf ein WinForms-Label kopiert den Label-Text ins Clipboard.
Verschiedene bisher bekannte Lösungen wie das Überschreiben von WndProc oder Manipulation des Clipboard-Inhalts haben Nebeneffekte. Die folgende Lösung dagegen keine, zumindest so wie es aussieht.
Einfach die Text-Eigenschaft überschreiben und den Text-Wert in einer eigenen Variable ablegen und NICHT auf die Text-Eigenschaft des Basis-Labels zugreifen (diese muss immer leer bleiben!). Bei einer Textänderung das Label refreshen und das TextChanged-Ereignis anschieben.
Bei weiterem eigenem Code in einem abgeleiteten Label-Control darf natürlich ebenfalls nicht auf die Basis-Text-Eigenschaft zugegriffen werden.
Private mText As String
Public Overrides Property Text As String
Get
Return mText
End Get
Set(value As String)
If mText <> value Then
mText = value
Me.Refresh()
Me.OnTextChanged(EventArgs.Empty)
End If
End Set
End Property
Kommentare zum Snippet