14

コード内のパネルにラベルを動的に追加しています。

私がやりたいことは、フォントをアウトライン化して、パネルの背景色から目立つようにすることです。

問題は、Winforms を使用して C# でフォントのアウトラインやシャドウ効果を作成する方法がわからないことです。

誰が私が何を見なければならないか、正しい方向に向けることができるか知っていますか? 私が何を意味するのか理解できない場合は、次の写真が私が望むものです: (表地)

ここに画像の説明を入力

4

1 に答える 1

33

独自のコントロールをカスタムペイントする必要があると思います。の例を次に示し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た) にマッピングすることです。また、いくつかのイベント発生メソッドをオーバーライドして、ルック アンド フィールをさらに制御することもできます (マウスがラベルの上にあるときに を変更するなど)。 ..)。シャドウ効果とグロー効果を作成することもできます (少し多くのコードが必要です)。AlignmentStringFormatsfForeColor

ここに画像の説明を入力

于 2013-11-08T03:48:19.917 に答える