سؤال

وهناك طريقة لإضافة شبح الهبوط لضوابط؟

هل هناك أي ضوابط هناك مع هذه الميزة؟

هل كانت مفيدة؟

المحلول

لقد كان هذا السؤال في جميع أنحاء لمدة 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++;
                }
            }
        }
    }

ومن الواضح يمكنك اختيار نوع تحكم يختلف عن جمع الحاوية والتي يمكن أن تختلف في اللون وعمق الظل مع بعض القرص قاصر.

نصائح أخرى

لديك للكتابة فوق 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;
    }
}

وهناك في WPF إذا كنت يمكن أن تمتد إلى استخدام هذا بدلا من ذلك، لا أعتقد أن هناك بديل في Windows Forms بسبب محدودية قدرات GDI +.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top