Pergunta

Estou adicionando rótulos dinamicamente aos painéis no meu código.

Algo que eu quero fazer é poder delinear a fonte para que ela possa se destacar da cor de fundo do painel.

O problema é que não sei como criar um esboço para minha fonte ou mesmo um efeito de sombra em C# usando WinForms.

Alguém sabe o que devo olhar ou pode me apontar na direção certa? Se você não entende o que quero dizer, a imagem a seguir é o que eu gostaria: (o forro externo)

enter image description here

Foi útil?

Solução

Eu acho que você precisa pintar seu próprio controle personalizado. Aqui está um exemplo para um Label. Observe que é apenas uma demonstração, você deve tentar descobrir mais sobre pintura personalizada no 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);                            
        }
    }
}

Você pode alterar a cor do contorno via OutlineForeColor propriedade, você pode alterar a largura do esboço através do OutlineWidth propriedade. Quando você altera essas propriedades no designer, o efeito não é aplicado imediatamente (como não há nenhum código para fazer isso, quero mantê -lo curto e simples), o efeito é aplicado apenas quando o formulário é focado.

O que você pode adicionar mais é mapear o TextAlign para o Alignment do StringFormat (nomeado sf no código), você também pode substituir alguns métodos de levantamento de eventos para adicionar mais controle sobre a aparência (como mudar o ForeColor Quando o mouse está sobre o rótulo ...). Você pode até criar algum efeito de sombra e efeito de brilho (requer um pouco mais de código).

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top