Hallo,
ich versuche in meiner Anwendung, die über Textboxen als benutzerdefiniertes Steuerelement verfügt, die Textbox, die aktuell den Focus erhält/besitzt farbig zu markieren.
Über den OnPaint-Event habe ich es schon versucht, aber das erfordert in der Sub New() den SetStale auf Userpaint zu setzen. Dies hat den unschönen Nebeneffekt, daß auch der Text in der Textbox neu gezeichnet werden muß. Wenn ich dies wie unten aufgezeigt mache, verändert sich der Text bei der ersten Eingabe auch auf Fett (was er ohne das Neuzeichnen nicht tun würde) und die Caret-Steuerung funktioniert nicht mehr sauber von Zeichen zu Zeichen sondern geht z.B. bei CursorRechts wahllos mal 0,5, mal 1, mal 2 Zeichen weiter.
Hier der Code im benutzerdefinierten Steuerelement (bringt das oben beschriebene Verhalten und scheidet als Lösung aus):
Das Textbox-Controls im Formular haben (soweit ich weiß) keine Abweichungen vom VB.NET-Default.
Weiß jemand Rat?
Vielen Dank.
P.S: Dies ist meine erste Frage hier. Daher muß ich auch noch fragen, wie ich hier die Leerzeilen in der Quellcode-Darstellung weg bekomme.
ich versuche in meiner Anwendung, die über Textboxen als benutzerdefiniertes Steuerelement verfügt, die Textbox, die aktuell den Focus erhält/besitzt farbig zu markieren.
Über den OnPaint-Event habe ich es schon versucht, aber das erfordert in der Sub New() den SetStale auf Userpaint zu setzen. Dies hat den unschönen Nebeneffekt, daß auch der Text in der Textbox neu gezeichnet werden muß. Wenn ich dies wie unten aufgezeigt mache, verändert sich der Text bei der ersten Eingabe auch auf Fett (was er ohne das Neuzeichnen nicht tun würde) und die Caret-Steuerung funktioniert nicht mehr sauber von Zeichen zu Zeichen sondern geht z.B. bei CursorRechts wahllos mal 0,5, mal 1, mal 2 Zeichen weiter.
Hier der Code im benutzerdefinierten Steuerelement (bringt das oben beschriebene Verhalten und scheidet als Lösung aus):
VB.NET-Quellcode
- Protected Overrides Sub OnPaint(e As PaintEventArgs)
- Dim p As Pen = Nothing
- If Me.Focused Then
- p = New Pen(Brushes.Red)
- Else
- p = New Pen(Brushes.Gainsboro)
- End If
- e.Graphics.DrawRectangle(p, 0, 0, Me.ClientSize.Width - 1, Me.ClientSize.Height - 1)
- e.Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), Me.ClientRectangle)
- MyBase.OnPaint(e)
- End Sub
Das Textbox-Controls im Formular haben (soweit ich weiß) keine Abweichungen vom VB.NET-Default.
Weiß jemand Rat?
Vielen Dank.
P.S: Dies ist meine erste Frage hier. Daher muß ich auch noch fragen, wie ich hier die Leerzeilen in der Quellcode-Darstellung weg bekomme.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „claus“ ()