Question

J'ajoute dynamiquement des étiquettes aux panneaux de mon code.

Quelque chose que je veux faire est de pouvoir décrire la police afin qu'il puisse se démarquer de la couleur d'arrière-plan du panneau.

Le problème est que je ne sais pas comment créer un plan pour ma police ou même un effet fantôme en C # en utilisant WinForms.

Quelqu'un sait ce que je devrais regarder ou peut me diriger dans la bonne direction? Si vous ne comprenez pas ce que je veux dire, l'image suivante est ce que j'aimerais: (la doublure extérieure)

enter image description here

Était-ce utile?

La solution

Je pense que vous devez peindre sur mesure votre propre contrôle. Voici un exemple pour un Label. Notez que c'est juste une démo, vous devriez essayer d'en savoir plus sur la peinture personnalisée dans WinForms:

public class CustomLabel : Label
{
    public CustomLabel()
    {
        OutlineForeColor = Color.Green;
        OutlineWidth = 2;
    }
    public Color OutlineForeColor { get; set; }
    public float OutlineWidth { get; set; }
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle);
        using (GraphicsPath gp = new GraphicsPath())
        using (Pen outline = new Pen(OutlineForeColor, OutlineWidth)
            { LineJoin = LineJoin.Round})
        using(StringFormat sf = new StringFormat())
        using(Brush foreBrush = new SolidBrush(ForeColor))
        {
            gp.AddString(Text, Font.FontFamily, (int)Font.Style,
                Font.Size, ClientRectangle, sf);                                
            e.Graphics.ScaleTransform(1.3f, 1.35f);
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
            e.Graphics.DrawPath(outline, gp);                
            e.Graphics.FillPath(foreBrush, gp);                            
        }
    }
}

Vous pouvez modifier la couleur de contour via OutlineForeColor propriété, vous pouvez modifier la largeur de contour via le OutlineWidth propriété. Lorsque vous modifiez ces propriétés dans le concepteur, l'effet n'est pas appliqué immédiatement (car il n'y a pas de code pour le faire, je veux le garder court et simple), l'effet n'est appliqué que lorsque le formulaire est focalisé.

Ce que vous pouvez ajouter plus, c'est de cartographier le TextAlign au Alignment de la StringFormat (nommé sf Dans le code), vous pouvez également remplacer certaines méthodes d'élévation pour ajouter plus de contrôle sur l'apparence (comme pour modifier le ForeColor Lorsque la souris est sur l'étiquette ...). Vous pouvez même créer un effet d'ombre et un effet brillant (il nécessite un peu plus de code).

enter image description here

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top