質問

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

私がやりたいことは、パネルの背景色から目立つようにフォントの輪郭を描くことができることです。

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

誰かが私が何を見るべきか知っているか、私を正しい方向に向けることができるか?私が何を意味するのかわからない場合、次の写真が私が望むものです:(外側の裏地)

enter image description here

役に立ちましたか?

解決

独自のコントロールをカスタムペイントする必要があると思います。以下はaの例です 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 財産。これらのプロパティを設計者に変更すると、効果はすぐに適用されません(それを行うコードがないため、短くシンプルに保ちたいので)、フォームが焦点を合わせた場合にのみ効果が適用されます。

さらに追加できるのは、マッピングです TextAlignAlignmentStringFormat (名前が付けられました sf コードで)、いくつかのイベントを上げる方法をオーバーライドして、ルックアンドフィールをより強く制御することもできます(変化するなど ForeColor マウスがラベルの上にあるとき...)。 Shadow EffectとGlow Effectを作成することもできます(もう少しコードが必要です)。

enter image description here

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top