2010-12-05 42 views

Répondre

28

Ce n'est pas possible. Si vous essayez en remplaçant TextBox et en appelant SetStyle (ControlStyles.UserPaint, true) dans le constructeur afin que vous puissiez substituer OnPaintBackground et dessiner l'image, vous aurez plusieurs surprises grossières. Le retour au mode de rendu hérité en fait partie. TextBox date des tout premiers jours de Windows, alors qu'il devait encore tourner sur du matériel 386SUX. Un crime particulier, il s'engage à travailler raisonnablement sur un tel matériel limité était de se dessiner sans utiliser l'événement WM_PAINT. Cela détruit l'image d'arrière-plan.

Il existe un projet chez CodeProject.com qui en fournit un. Je ne peux pas le recommander.

+0

Merci pour une réponse courte et très instructive. Connaissez-vous une solution de contournement, c'est-à-dire un arrière-plan transparent? –

+4

Solution de contournement: créez un 'UserControl' avec une image d'arrière-plan. Mettez un transparent 'RichTextBox' sur le dessus. Pour produire un fichier 'RichTextBox' transparent, copiez le [Code de Hans Passant] (http://stackoverflow.com/questions/605920/reasons-for-why-a-winforms-label-does-not-want-to-be-transparent/608256 # 608256) mais hérite de 'RichTextBox' au lieu de' Label'. Notez que l'héritage de 'TextBox' ne fonctionnera pas pour cette astuce. Vous pourriez être en mesure de donner une image d'arrière-plan 'RichTextBox' d'une manière plus propre que celle-ci; c'est un contrôle plus puissant que 'TextBox'. – Brian

1

Si vous êtes à un certain codage natif, vous pouvez essayer d'utiliser la technique mentionnée ici: http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox (Edit: lien original est en baisse, thnx Zyo, il remplacé par lien vers copie archivée dans la machine à remonter le temps

Bien que l'article traite de dessiner quelque chose dans une zone de texte après la zone de texte est dessinée (pas avant), peut-être qu'il pourrait être modifié pour accomplir ce dont vous avez besoin.