Question

est-il un moyen d'ajouter une ombre portée à des contrôles?

sont-il des contrôles là-bas avec cette fonctionnalité?

Était-ce utile?

La solution

Cette question a été autour depuis 6 ans et a besoin d'une réponse. Je souhaite que tous ceux qui ont besoin de faire cela peut extrapoler une réponse pour toute commande réglée de ma solution. J'ai eu un groupe et je voulais dessiner une ombre sous chaque contrôle enfant -. Dans ce cas, un ou plusieurs panneaux (mais la solution doit tenir bon pour d'autres types de contrôle avec quelques modifications mineures du code)

Comme l'ombre de chute pour un contrôle doit être établi sur la surface du conteneur de ce contrôle nous commençons par l'ajout d'une fonction à l'événement de peinture () du conteneur.

Container.Paint += dropShadow;

dropShadow () ressemble à ceci:

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

Il est clair que vous pouvez choisir un type de contrôle différent de la collection du récipient et vous pouvez varier la couleur et la profondeur de l'ombre avec quelques modifications mineures.

Autres conseils

Vous devez remplacer le CreateParamsproperty comme ceci:

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

Il est en WPF si vous pouvez étirer à utiliser cette place, je ne crois pas qu'il y ait une solution de rechange dans Windows Forms en raison des capacités limitées de GDI +.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top