2010-12-05 15 views

Respuesta

28

No es posible. Si lo intenta anulando TextBox y llamando a SetStyle (ControlStyles.UserPaint, true) en el constructor para que pueda anular OnPaintBackground y dibujar la imagen, tendrá varias sorpresas groseras. Volver al modo de representación heredado es solo uno de ellos.

TextBox data de los primeros días de Windows, cuando aún tenía que ejecutarse en hardware 386SUX. Un crimen particular que se compromete a trabajar razonablemente en hardware tan limitado fue dibujarse sin usar el evento WM_PAINT. Esto destruye la imagen de fondo.

Hay un proyecto en CodeProject.com que proporciona uno. No puedo recomendarlo.

+0

Gracias por su breve y muy informativa respuesta. ¿Conoces alguna solución, es decir, fondo transparente? –

+4

Solución alternativa: cree un 'UserControl' con una imagen de fondo. Coloque un 'RichTextBox' transparente encima. Para producir un 'RichTextBox' transparente, copie [Hans Passant's Code] (http://stackoverflow.com/questions/605920/reasons-for-why-a-winforms-label-does-not-want-to-be-transparent/608256 # 608256) pero hereda de 'RichTextBox' en lugar de' Label'. Tenga en cuenta que heredar de 'TextBox' no funcionará para este truco. Es posible que pueda darle a un 'RichTextBox' una imagen de fondo de una manera más limpia que esta; es un control más poderoso que 'TextBox'. – Brian

1

Si usted está listo para algo de código nativo, usted podría tratar de usar la técnica mencionada aquí: http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox (Edit: vínculo original se ha reducido, thnx Zyo, lo reemplazó con un enlace a copia archivada en la máquina de Wayback .)

Aunque el artículo trata de dibujar algo en un cuadro de texto después de el cuadro de texto está dibujado (no antes), quizás podría modificarse para lograr lo que necesita.

Cuestiones relacionadas