加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#中设置轮廓颜色的字体

发布时间:2020-12-15 06:19:40 所属栏目:百科 来源:网络整理
导读:我在代码中动态添加标签到面板. 我想做的是能够勾勒出字体,从而可以从面板的背景色中脱颖而出. 问题是我不知道如何使用Winforms在C#中为我的字体创建一个轮廓,甚至创建一个阴影效果. 任何人都知道我应该看什么,还是指向正确的方向? 如果你不明白我的意思,下
我在代码中动态添加标签到面板.

我想做的是能够勾勒出字体,从而可以从面板的背景色中脱颖而出.

问题是我不知道如何使用Winforms在C#中为我的字体创建一个轮廓,甚至创建一个阴影效果.

任何人都知道我应该看什么,还是指向正确的方向?
如果你不明白我的意思,下面的图片是我想要的:(外衬)

解决方法

我想你必须定制油漆你自己的控制.这是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映射到StringFormat的对齐方式(在代码中名为sf),还可以覆盖一些事件提升方法,以增加对外观的控制(例如,在鼠标时更改ForeColor在标签上…).您甚至可以创建一些阴影效果和发光效果(它需要更多的代码).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读