Тень в элементах управления Winforms? - PullRequest
15 голосов
/ 17 марта 2010

есть ли способ добавить тень к элементам управления?

Есть ли какие-либо элементы управления с этой функцией?

Ответы [ 3 ]

29 голосов
/ 17 марта 2010

Вы должны перезаписать свойство 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;
    }
}
7 голосов
/ 22 марта 2016

Этот вопрос существует уже 6 лет и нуждается в ответе. Я надеюсь, что любой, кто должен сделать это, может экстраполировать ответ для любого набора элементов управления из моего решения. У меня была панель, и я хотел нарисовать тень под каждым дочерним элементом управления - в данном случае одна или несколько панелей (но решение должно быть приемлемо для других типов элементов управления с некоторыми незначительными изменениями кода).

Поскольку тень элемента управления должна быть нарисована на поверхности контейнера этого элемента управления, мы начнем с добавления функции в событие Paint () контейнера.

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

Очевидно, что вы можете выбрать другой тип элемента управления из коллекции контейнера, и вы можете изменить цвет и глубину тени с некоторыми незначительными изменениями.

2 голосов
/ 17 марта 2010

В WPF есть возможность использовать ее вместо этого, я не верю, что в Windows Forms есть альтернатива из-за ограниченных возможностей GDI +.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...