渐变面板自定义控件






3.73/5 (12投票s)
2006年12月7日
3分钟阅读

98180

4034
本文介绍了创建渐变面板自定义控件的快速而简单的方法。
引言
本文介绍了创建渐变面板自定义控件的快速而简单的方法。 在此示例中,标准 Windows Forms Panel
容器控件被扩展,以提供持久的渐变背景;这与使用针对 Panel
的图形上下文动态创建渐变背景的方法不同。 即使背景是持久的,它也会在每次调整大小时动态更新。 图 1 说明了该控件的使用
图 1. 使用中的渐变面板控件
入门
为了开始,启动 Visual Studio 2005 IDE 并打开包含的项目。 解决方案由一个包含单个窗体和单个自定义控件的 WinForms 项目组成。 该窗体用作自定义控件的测试平台,并且自定义控件是标准 Windows Forms Panel
控件的扩展。 图 2 显示了该项目的解决方案资源管理器
图 2. 解决方案资源管理器
代码:主窗体
应用程序的主窗体不包含任何有意义的代码;窗体本身包含渐变面板控件的两个实例,并且通过属性编辑器配置渐变面板控件,以用于控件测试。
由于主窗体很简单,因此我不会在本文档中对其进行进一步描述。
代码:渐变面板控件
GradientPanel
控件是一个自定义控件,用于扩展标准 Windows Forms Panel
控件;对标准控件所做的唯一补充是在运行时呈现渐变背景所需的补充。
如果您打开代码并检查导入,您将注意到在命名空间和类声明之前的以下导入。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
namespace GradientPanel
{
public partial class GradientPanel : System.Windows.Forms.Panel
{
在类声明之后,代码创建了两个成员变量,用于保存渐变的开始和结束颜色。 在这两个变量的声明之后,类构造函数调用 PaintGradient
方法,该方法依次在面板上绘制渐变
// member variables
System.Drawing.Color mStartColor;
System.Drawing.Color mEndColor;
public GradientPanel()
{
InitializeComponent();
PaintGradient();
}
protected override void OnPaint(PaintEventArgs pe)
{
// TODO: Add custom paint code here
// Calling the base class OnPaint
base.OnPaint(pe);
}
接下来描述在类构造函数中调用的 PaintGradient
方法
private void PaintGradient()
{
System.Drawing.Drawing2D.LinearGradientBrush gradBrush;
gradBrush =
new System.Drawing.Drawing2D.LinearGradientBrush(new
Point(0, 0), new Point(this.Width, this.Height),
PageStartColor, PageEndColor);
Bitmap bmp = new Bitmap(this.Width, this.Height);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(gradBrush, new Rectangle(0, 0,
this.Width, this.Height));
this.BackgroundImage = bmp;
this.BackgroundImageLayout = ImageLayout.Stretch;
}
PaintGradient
方法用于生成和调整线性渐变画笔的大小;此方法创建位图并将渐变应用于位图。 然后将背景图像属性设置为指向位图,这会在面板后面显示渐变。 使用这种方法,放置在容器中的控件不会干扰渐变的显示。
在设计时,控件用户可以在属性网格中设置这些属性,或者可以在代码中设置这些值。
图 3. 开始和结束颜色的属性
摘要
本文介绍了一种在基于 Panel
控件的自定义控件上创建持久渐变背景的方法。 示例中提供的控件可以放入其他项目中并按原样使用。 该控件的目的是提供一个工具,用于制作渐变面板,而无需直接在面板页面的图形上下文上绘制渐变。