[vb.net] Eigenes Textbox Steuerelement

C-H

Erfahrenes Mitglied
Hallo!

Ich möchte ein eigenes Textbox-Steuerelement schreiben, dem ich ein Hinterhrundbild geben kann. Leider funktioniert das nicht so richtig. So sieht der Code aus:

Code:
Imports System.ComponentModel
 


PublicClass iTextboxInherits System.Windows.Forms.TextBox


#Region " Vom Windows Form Designer generierter Code "PublicSubNew()



MyBase.New()' Dieser Aufruf ist für den Windows Form-Designer erforderlich.

InitializeComponent()
' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen

EndSub

' UserControl1 überschreibt den Löschvorgang zur Bereinigung der Komponentenliste.


ProtectedOverloadsOverridesSub Dispose(ByVal disposing AsBoolean)If disposing ThenIfNot (components IsNothing) Thencomponents.Dispose()


EndIf


EndIf

MyBase.Dispose(disposing)

EndSub

' Für Windows Form-Designer erforderlich
Private components As System.ComponentModel.IContainer
'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer erforderlich
'Sie kann mit dem Windows Form-Designer modifiziert werden.
'Verwenden Sie nicht den Code-Editor zur Bearbeitung.


<System.Diagnostics.DebuggerStepThrough()> PrivateSub InitializeComponent()components = New System.ComponentModel.Container()

Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(iTextbox))
'
' iTextbox
'
Me.Name = "iTextbox"
Me.Size = New System.Drawing.Size(100, 20)
Me.ResumeLayout(False)

EndSub


#EndRegion



#Region " Variables"Private rect As Rectangle


#EndRegion



#Region " Properties"Dim bgImage As Image = Nothing

<Description("Das Hintergrundbild für das Steuerelement"), Category("Darstellung")> _
'Public Property BImage() As Image


PublicOverridesProperty BackgroundImage() As ImageGetReturn bgImage


EndGet



Set(ByVal Value As Image)bgImage = Value


EndSet


EndProperty


#EndRegion



#Region " Events"ProtectedOverridesSub onPaint(ByVal e As System.Windows.Forms.PaintEventArgs)



If IsNothing(bgImage) = FalseThenrect = New Rectangle(0, 0, Me.Width, Me.Height)

e.Graphics.DrawImage(bgImage, rect)

EndIf


EndSub


#EndRegion

EndClass

Wenn ich ein Panel als Basis nehme funktioniert der Code. Wieso es mit Textbox nicht funktioniert, naja, das ist mein Problem!
 
Wenn du die Methode OnPaint überschreibst musst doch die komplette Textbox selbst gezeichnet werden. So wie ich aus dem Code entnehmen konnte, zeichnest du nur das Bild.
Man könnte vielleicht noch die Basisfunktion aufrufen, aber dann schreibt man ggf. das Bild über den Text.
 
Zurück