/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Design;
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace GradientLabelHost
{
///
/// Summary description for GradientLabelHost.
///
public class GradientLabelHost : System.Windows.Forms.Form
{
private GradientLabel gradientLabel1;
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
public GradientLabelHost()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.gradientLabel1 = new GradientLabel();
this.SuspendLayout();
//
// gradientLabel1
//
this.gradientLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.gradientLabel1.Font = new System.Drawing.Font("Tahoma", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.gradientLabel1.ForeColor = System.Drawing.Color.White;
this.gradientLabel1.GradientFill.ColorA = System.Drawing.SystemColors.Info;
this.gradientLabel1.GradientFill.ColorB = System.Drawing.Color.DarkViolet;
this.gradientLabel1.GradientFill.GradientFillStyle = System.Drawing.Drawing2D.LinearGradientMode.BackwardDiagonal;
this.gradientLabel1.Name = "gradientLabel1";
this.gradientLabel1.Size = new System.Drawing.Size(596, 118);
this.gradientLabel1.TabIndex = 0;
this.gradientLabel1.Text = "Gradient Label Test";
//
// GradientLabelHost
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(596, 118);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.gradientLabel1});
this.Name = "GradientLabelHost";
this.Text = "GradientLabelHost";
this.ResumeLayout(false);
}
#endregion
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.Run(new GradientLabelHost());
}
}
///
/// Summary description for GradientLabel.
///
public class GradientLabel : System.Windows.Forms.UserControl
{
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
public GradientLabel()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
// TODO: Add any initialization after the InitForm call
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Component Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
//
// GradientLabel
//
this.Name = "GradientLabel";
this.Size = new System.Drawing.Size(372, 128);
this.Load += new System.EventHandler(this.GradientLabel_Load);
gradient.GradientChanged += new EventHandler(GradientChanged);
}
#endregion
private string text;
private GradientFill gradient = new GradientFill();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public GradientFill GradientFill
{
get
{
return gradient;
}
set
{
gradient = value;
gradient.GradientChanged += new EventHandler(GradientChanged);
this.Invalidate();
}
}
private void GradientLabel_Load(object sender, System.EventArgs e)
{
this.ResizeRedraw=true;
}
[Browsable(true),
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text
{
get
{
return text;
}
set
{
text = value;
this.Invalidate();
}
}
protected override void OnPaintBackground(
System.Windows.Forms.PaintEventArgs e)
{
LinearGradientBrush brush = new LinearGradientBrush(e.ClipRectangle, gradient.ColorA,
gradient.ColorB, gradient.GradientFillStyle);
// Draw the gradient background.
e.Graphics.FillRectangle(brush, e.ClipRectangle);
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
base.OnPaint(e);
// Draw the label text.
e.Graphics.DrawString(text, this.Font, new SolidBrush(this.ForeColor), 0, 0);
}
private void GradientChanged(object sender, EventArgs e)
{
this.Invalidate();
}
}
[TypeConverter(typeof(ExpandableObjectConverter)),
Editor(typeof(GradientFillEditor), typeof(UITypeEditor))]
public class GradientFill
{
private Color colorA = Color.LightBlue;
private Color colorB = Color.Purple;
private LinearGradientMode gradientStyle= LinearGradientMode.ForwardDiagonal;
public event EventHandler GradientChanged;
public Color ColorA
{
get
{
return colorA;
}
set
{
colorA = value;
OnGradientChanged(new EventArgs());
}
}
public Color ColorB
{
get
{
return colorB;
}
set
{
colorB = value;
OnGradientChanged(new EventArgs());
}
}
[System.ComponentModel.RefreshProperties(RefreshProperties.Repaint)]
public LinearGradientMode GradientFillStyle
{
get
{
return gradientStyle;
}
set
{
gradientStyle = value;
OnGradientChanged(new EventArgs());
}
}
private void OnGradientChanged(EventArgs e)
{
if (GradientChanged != null)
{
GradientChanged(this, e);
}
}
}
public class GradientFillEditor : UITypeEditor
{
public override bool GetPaintValueSupported(
System.ComponentModel.ITypeDescriptorContext context)
{
return true;
}
public override void PaintValue(
System.Drawing.Design.PaintValueEventArgs e)
{
GradientFill fill = (GradientFill)e.Value;
LinearGradientBrush brush = new LinearGradientBrush(e.Bounds,
fill.ColorA, fill.ColorB, fill.GradientFillStyle);
// Paint the thumbnail.
e.Graphics.FillRectangle(brush, e.Bounds);
}
}
}