Pregunta

Estoy agregando dinámicamente etiquetas a los paneles en mi código.

Algo que quiero hacer es ser capaz de delinear la fuente para que pueda destacarse del color de fondo del panel.

El problema es que no sé cómo crear un esquema para mi fuente o incluso un efecto de sombra en C# usando WinForms.

¿Alguien sabe lo que debo mirar o puede señalarme en la dirección correcta? Si no entiendes lo que quiero decir, la siguiente imagen es lo que me gustaría: (el forro exterior)

enter image description here

¿Fue útil?

Solución

Creo que tienes que pintar a medida tu propio control. Aquí hay un ejemplo para un Label. Tenga en cuenta que es solo una demostración, debe intentar obtener más información sobre la pintura personalizada en 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);                            
        }
    }
}

Puedes cambiar el color del contorno a través de OutlineForeColor propiedad, puede cambiar el ancho de esquema a través del OutlineWidth propiedad. Cuando cambia estas propiedades en el diseñador, el efecto no se aplica de inmediato (porque no hay ningún código para hacerlo, quiero mantenerlo corto y simple), el efecto se aplica solo cuando el formulario se enfoca.

Lo que puedes agregar más es mapear el TextAlign hacia Alignment del StringFormat (nombrada sf En el código), también puede anular algunos métodos de aumento de eventos para agregar más control sobre el aspecto (como para cambiar el ForeColor Cuando el mouse está sobre la etiqueta ...). Incluso puede crear algún efecto de sombra y efecto brillo (requiere un poco más de código).

enter image description here

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top