문제

컨트롤에 드롭 그림자를 추가하는 방법이 있습니까?

이 기능에 대한 컨트롤이 있습니까?

도움이 되었습니까?

해결책

이 질문은 6 년 동안 있었으며 답이 필요합니다. 이 작업을 수행 해야하는 사람이 내 솔루션의 컨트롤 세트에 대한 답변을 외삽 할 수 있기를 바랍니다. 패널이 있었고 모든 어린이 컨트롤 아래에 드롭 그림자를 그리고 싶었습니다.이 경우 하나 이상의 패널이 하나 이상의 패널을 사용했습니다 (그러나 솔루션은 약간의 작은 코드 변경으로 다른 제어 유형에 적합해야합니다).

컨트롤 컨테이너 표면에 컨트롤의 드롭 섀도우를 그려야하므로 컨테이너의 페인트 () 이벤트에 함수를 추가하여 시작합니다.

Container.Paint += dropShadow;

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++;
                }
            }
        }
    }

분명히 컨테이너 컬렉션에서 다른 제어 유형을 선택할 수 있으며 약간의 조정으로 그림자의 색상과 깊이를 변경할 수 있습니다.

다른 팁

당신은 그것을 덮어 써야합니다 CreateParams이와 같은 속성 :

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;
    }
}

WPF가 대신 사용하도록 스트레칭 할 수 있다면 GDI+의 제한된 기능으로 인해 Windows 양식에 대안이 있다고 생각하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top