65.9K
CodeProject 正在变化。 阅读更多。
Home

渐变面板自定义控件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.73/5 (12投票s)

2006年12月7日

3分钟阅读

viewsIcon

98180

downloadIcon

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 控件的自定义控件上创建持久渐变背景的方法。 示例中提供的控件可以放入其他项目中并按原样使用。 该控件的目的是提供一个工具,用于制作渐变面板,而无需直接在面板页面的图形上下文上绘制渐变。

© . All rights reserved.