質問

コントロールにドロップシャドウを追加する方法はありますか?

この機能でそこに任意のコントロールがあるのですか?

役に立ちましたか?

解決

この質問は、6年前から出回って、答えを必要としています。私はこれを行うために必要がある人は、私の溶液から設定された任意の制御のための答えを推定できることを願っています。このインスタンス内の1つのまたは複数のパネル(しかし、解決策はいくつかのマイナーコードの変更と、他のコントロールタイプのために良い保持する必要があります)。

- 私はパネルを持っていたし、すべての子コントロールの下にドロップシャドウを描きたかったです。

の制御用のドロップシャドウは、我々はコンテナのペイント()イベントに機能を追加することによって開始することコントロールのコンテナの表面に描かれなければならないように

Container.Paint += dropShadow;

ドロップシャドウ()は次のようになります:

    private void dropShadow(object sender, PaintEventArgs e)
    {
        Panel panel = (Panel)sender;
        Color[] shadow = new Color[3];
        shadow[0] = Color.FromArgb(181, 181, 181);
        shadow[1] = Color.FromArgb(195, 195, 195);
        shadow[2] = Color.FromArgb(211, 211, 211);
        Pen pen = new Pen(shadow[0]);
        using (pen)
        {
            foreach (Panel p in panel.Controls.OfType<Panel>())
            {
                Point pt = p.Location;
                pt.Y += p.Height;
                for (var sp = 0; sp < 3; sp++)
                {
                    pen.Color = shadow[sp];
                    e.Graphics.DrawLine(pen, pt.X, pt.Y, pt.X + p.Width - 1, pt.Y);
                    pt.Y++;
                }
            }
        }
    }

明らかに、あなたは、コンテナのコレクションから別のコントロールの種類を選ぶことができますし、いくつかのマイナーな改良と影の色と深さを変えることができます。

他のヒント

あなたはこのようCreateParamspropertyを上書きする必要があります:

private const int CS_DROPSHADOW = 0x00020000;
protected override CreateParams CreateParams
{
    get
    {
        // add the drop shadow flag for automatically drawing
        // a drop shadow around the form
        CreateParams cp = base.CreateParams;
        cp.ClassStyle |= CS_DROPSHADOW;
        return cp;
    }
}

あなたは代わりに、私はGDI +の限定された機能に起因するWindowsフォームでの代替があると信じていないことを使用して伸ばすことができればWPFであります。

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