2011-02-05 4 views
7

comment est-ce que je peux rendre ma boîte richtext transparente
Je veux ceci parce que je suis en train de mettre un texte sur une image graphique (qui est l'arrière-plan de mon formulaire).transparent richTextBox

C'est la raison pour laquelle je voulais que le RichTextbox soit transparent,
J'utilise .NET, C# et dans une application sous forme de fenêtres

+1

Vous devrez le coder vous-même (ou trouver quelqu'un qui l'a déjà fait), rien de prévu pour le faire. – ChristopheD

+1

Jetez un oeil à cette entrée en double possible - http://stackoverflow.com/questions/1716427/making-a-textbox-transparent – eandersson

+0

que voulez-vous dire de le coder par moi-même ?? comment c'est?? –

Répondre

5

Il n'existe pas de transparence réelle dans un contrôle WinForms. Le mode transparent hérite de l'arrière-plan par défaut de son parent. La façon dont j'ai travaillé autour de lui dans le passé a été d'utiliser l'événement OnPaint et ensuite utiliser la méthode Graphics.DrawString pour positionner le texte où je le veux.

0

Il n'y a pas moyen d'avoir des contrôles Windows Forms avec un fond transparent. Beaucoup l'ont déjà essayé et tous ont échoué. Certains sont venus avec des hacks exotiques, mais ils échouent tous à certains détails. Utilisez WPF ou HTML si vous avez besoin de fonctionnalités de rendu plus avancées que celles que les anciens Windows Forms peuvent vous offrir.

+1

Ceci est incorrect. C'est faisable, surtout quand il s'agit de la bibliothèque graphique. Alors que tous les Winforms sont GDI + ou bitmap (essentiellement), la 'transparence' est définitivement possible en le plaçant simplement en transparent, puis en annulant le dessin en arrière-plan. Malheureusement, toute la transparence 2D fonctionne (même les rendus 3D truqués), l'arrière-plan est dessiné ou non, mais lorsqu'il n'est pas dessiné, vous remarquerez qu'il s'agit d'une couleur «masque» avec des instructions dans l'en-tête du fichier. avec eux - voir les spécifications de transparence PNG pour plus d'informations sur les astuces appliquées. WPF ne fait pas exception. –

7

Je sais que cette réponse est très tardive, mais j'espère qu'elle aidera d'autres personnes qui voudraient un moyen facile d'y arriver. Commencez par créer un nouveau contrôle utilisateur dans votre projet et attribuez-lui un nom, par exemple CustomRTB.cs. Une fois terminé, ouvrez la classe partielle et le changement:

public partial class CustomRTB : UserControl 

à:

public partial class CustomRTB : RichTextBox 

Cela entraînera une erreur lorsque vous ouvrez le fichier de conception si juste aller au fichier Designer.cs et de supprimer/commentaire les lignes qui montrent des erreurs (il n'y aura pas plus de deux lignes avec des erreurs). Ensuite, ajouter ce qui suit à la classe partielle:

protected override CreateParams CreateParams 
{ 
    get 
    { 
     //This makes the control's background transparent 
     CreateParams CP = base.CreateParams; 
     CP.ExStyle |= 0x20; 
     return CP; 
    } 
} 

La classe devrait ressembler à ceci maintenant:

public partial class CustomRTB : RichTextBox 
{ 
    public CustomRTB() 
    { 
     InitializeComponent(); 
    } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      //This makes the control's background transparent 
      CreateParams CP = base.CreateParams; 
      CP.ExStyle |= 0x20; 
      return CP; 
     } 
    } 
} 

maintenant construire votre solution et vous serez en mesure d'utiliser le contrôle dans vos formulaires. Ce contrôle sera complètement transparent et vous ne pourrez pas ajuster la transparence. Vous serez également en mesure de créer différents contrôles transparents en dehors d'une riche zone de texte en changeant la première ligne de ce code. Hope this helps :)

Edit:

Le problème avec le contrôle ci-dessus est qu'il ne peut être utilisé pour afficher le texte par programme car il est difficile de modifier lors de l'exécution ou le débogage de l'application (@nevelis explique dans le commentaire ci-dessous). D'abord, créez un autre contrôle utilisateur dans votre projet et nommez-le TranslucentPanel.cs (oui, il s'agit d'un panneau et il sera translucide dont l'opacité peut être contrôlée par programme) . Maintenant, ouvrez la classe partielle et le modifier comme:

public partial class TranslucentPanel : Panel 
{ 
    public TranslucentPanel() 
    { 
     InitializeComponent(); 
     SetStyle(ControlStyles.SupportsTransparentBackColor | 
      ControlStyles.OptimizedDoubleBuffer | 
      ControlStyles.AllPaintingInWmPaint | 
      ControlStyles.ResizeRedraw | 
      ControlStyles.UserPaint, true); 
     BackColor = Color.Transparent; 
    } 
} 

Vous devez prendre soin de l'erreur que les cultures lorsque vous construisez le projet simplement en commentant la ligne dans le fichier Designer.cs qui jette.Une fois terminé, reconstruisez votre projet et le panneau translucide apparaîtra dans votre boîte à outils comme auparavant. Utilisez ce panneau en tant que contrôle parent pour votre zone de texte transparente, c'est-à-dire placez le panneau sur votre formulaire et placez le RTB à l'intérieur. Vous pouvez également définir la propriété BorderStyle sur Aucun pour supprimer toute trace du RTB dans l'interface utilisateur.

Vous pouvez également contrôler l'opacité du panneau translucide en utilisant sa propriété BackColor dans votre programme:

translucentPanel1.BackColor = Color.FromArgb(50, 0, 0, 0); 

Modification des arguments ci-dessus vous passé permet de contrôler l'opacité et la couleur du panneau. Cette solution de contournement résoudra les problèmes de curseur et de défilement non seulement du RTB transparent, mais également de tout autre contrôle transparent que vous créez.

+1

Cela ne fonctionne pas très bien avec le défilement ou l'édition. 0x20, ou WS_EX_TRANSPARENT, signifie que le contrôle ne sera pas repeint à moins que sa fenêtre parente ne soit peinte. Si vous tapez, le curseur se retrouve après chaque caractère, et si vous le faites défiler devient un gâchis flou :( – nevelis

+0

@nevelis J'ai édité ma réponse pour inclure une solution de contournement pour ce problème. Dites-moi si cela vous aide :) –

+0

Oh putain que vous êtes une légende: DI ne l'a pas testé avec la riche zone de texte, mais l'édition est exactement ce dont j'avais besoin pour empêcher une barre de progression transparente de scintiller: D: D: D vous avez fait ma journée. Je vais essayer de tester la RichTextBox dans un petit moment et vous le dire! – nevelis