2010-12-05 14 views

Antwort

28

Es ist nicht möglich. Wenn Sie versuchen, TextBox zu überschreiben und SetStyle (ControlStyles.UserPaint, true) im Konstruktor aufzurufen, damit Sie OnPaintBackground überschreiben und das Bild zeichnen können, werden Sie einige unhöfliche Überraschungen erleben. Zurück zum Legacy-Rendering-Modus ist nur einer von ihnen.

TextBox stammt aus den frühen Tagen von Windows, als es noch auf 386SUX-Hardware laufen musste. Ein besonderes Verbrechen, das es sich verpflichtet, vernünftig auf solch eingeschränkter Hardware zu arbeiten, war, sich selbst zu zeichnen, ohne das Ereignis WM_PAINT zu verwenden. Dies zerstört das Hintergrundbild.

Es gibt ein Projekt bei CodeProject.com, das eins bietet. Ich kann es nicht empfehlen.

+0

Vielen Dank für kurze und sehr informative Antwort. Kennen Sie einige Abhilfe, d. H. Transparenten Hintergrund? –

+4

Workaround: Erstellen Sie ein 'UserControl' mit einem Hintergrundbild. Lege eine transparente 'RichTextBox' darauf. Um eine transparente 'RichTextBox' zu erstellen, kopieren Sie [Hans Passants Code] (http://stackoverflow.com/questions/605920/reasons-for-why-a-winforms-label-does-not-want-to-be-transparent/608256 # 608256), sondern erben von 'RichTextBox' anstelle von' Label'. Beachten Sie, dass das Erben von "TextBox" für diesen Trick nicht funktioniert. Sie können einer RichTextBox ein Hintergrundbild auf eine sauberere Weise geben. es ist eine leistungsfähigere Kontrolle als 'TextBox'. – Brian

1

Wenn Sie bis zu einem gewissen nativen Codierung sind, könnten Sie versuchen, die Technik, die hier erwähnt zu verwenden: http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox (Edit: Original-Link ist unten, thnx Zyo, es mit Link auf die archivierten Kopie in der Wayback Maschine ersetzt .)

Obwohl der Artikel über das Zeichnen von etwas in einem Textfeld nach die Textbox ist gezeichnet (nicht vorher), vielleicht könnte es geändert werden, um zu erreichen, was Sie brauchen.

Verwandte Themen