Вопрос

Я динамически добавляю этикетки в панели в своем коде.

Что -то, что я хочу сделать, это иметь возможность наметить шрифт, чтобы он мог выделиться на фоне цвета панели.

Проблема в том, что я не знаю, как создать контур для моего шрифта или даже теневого эффекта в C# с использованием Winforms.

Кто -нибудь знает, на что я должен смотреть или может указать мне в правильном направлении? Если вы не понимаете, что я имею в виду, я бы хотел следующую картинку: (Внешняя подкладка)

enter image description here

Это было полезно?

Решение

Я думаю, что вы должны настраивать свой собственный контроль. Вот пример для Label. Анкет Обратите внимание, что это всего лишь демонстрация, вы должны попробовать узнать больше на пользовательской живописи в 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);                            
        }
    }
}

Вы можете изменить контур цвета через OutlineForeColor свойство, вы можете изменить ширину схемы через OutlineWidth имущество. Когда вы меняете эти свойства в дизайнере, эффект не применяется немедленно (поскольку для этого нет никакого кода, я хочу сохранить его коротким и простым), эффект применяется только тогда, когда форма сосредоточена.

То, что вы можете добавить больше, это на картирование TextAlign в Alignment принадлежащий StringFormat (назван sf в коде) вы также можете переопределить некоторые методы повышения событий, чтобы добавить больше контроля над внешним видом (например, чтобы изменить ForeColor Когда мышь через этикетку ...). Вы даже можете создать некоторый эффект тени и эффект свечения (для этого требуется немного больше кода).

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top