如何在第2和第3区域之间重新创建阴影效果?

时间:2012-07-16 08:45:33

标签: winforms

我需要复制此窗口的底部部分,以便在我自己的表单中使用。

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要做的是覆盖现有控件的绘制或创建自己的控件。就个人而言,我会覆盖Panel控件的绘制,然后它将成为窗口整个底部的面板。

渐变面板是一个常见的要求,并且有一篇博文here(下面提供的代码)。

显然你不想绘制一个完整的渐变,但它演示了绘画如何在控件上工作。

您可以使用整个面板的较小子集绘制渐变,也可以使用Graphics.DrawPath之类的颜色绘制渐变,并以正确的颜色绘制直线。

<小时/> 博客邮政编码(以避免死链接):

using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace PostXING.Controls
{
    /// <summary>
    /// GradientPanel is just like a regular panel except it optionally  
    /// shows a gradient.
    /// </summary>
    [ToolboxBitmap(typeof(Panel))]
    public class GradientPanel : Panel
    {
        /// <summary>
        /// Property GradientColor (Color)
        /// </summary>
        private Color _gradientColor;
        public Color GradientColor {
            get { return this._gradientColor;}
            set { this._gradientColor = value;}
        }

        /// <summary>
        /// Property Rotation (float)
        /// </summary>
        private float _rotation;
        public float Rotation {
            get { return this._rotation;}
            set { this._rotation = value;}
        }

        protected override void OnPaint(PaintEventArgs e) {
                        if(e.ClipRectangle.IsEmpty) return; //why draw if non-visible?

            using(LinearGradientBrush lgb = new 
                           LinearGradientBrush(this.ClientRectangle, 
                      this.BackColor, 
                      this.GradientColor, 
                      this.Rotation)){
                e.Graphics.FillRectangle(lgb, this.ClientRectangle);
            }

                        base.OnPaint (e); //right, want anything handled to be drawn too.
        }
    }
}