使用C#创建自定义控件
创建自定义控件,在新建工程时,选择自定义控件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace KJ128WindowsLibrary
{
/// <summary>
/// LabelPanelStyle 样式
/// </summary>
public enum LabelPanelStyle
{
/// <summary>
/// 单边线模式
/// </summary>
BorderMode,
/// <summary>
/// 渐变填充模式
/// </summary>
FillGradual
}
public partial class LabelPanel : UserControl
{
#region 私有变量
#region 边框
private int m_BorderLineWidth = 1;//线宽
private Color m_BorderLineColor = Color.FromArgb(118, 153, 199);//边线颜色
private bool m_IsBorderLine = true; //是否使用边框线
#endregion
#region 样式
private LabelPanelStyle m_SetLabelPanelStyle = LabelPanelStyle.BorderMode;//样式
#endregion
#region 填充背景
private bool m_IsFillBackGround = false; //是否填充背景色
private Color m_FillGradualColor1 = Color.FromArgb(255,255,255);//Color1
private Color m_FillGradualColor2 = Color.FromArgb(236,238,244);//color2
private LinearGradientMode m_SetBackGroundGradineMode = LinearGradientMode.ForwardDiagonal;//GradineMode
#endregion
#region Label
#endregion
#endregion
#region 构造函数
/// <summary>
/// 函数
/// </summary>
public LabelPanel()
{
InitializeComponent();
this.Paint += new PaintEventHandler(LabelPanel_Paint);
}
#endregion
#region 属性
#region 外围边框 border
/// <summary>
/// 边框线宽
/// </summary>
public int BorderLineWidth
{
get
{
return m_BorderLineWidth;
}
set
{
m_BorderLineWidth = value;
}
}
/// <summary>
/// 边框线的颜色
/// </summary>
public Color BorderLineColor
{
get
{
return m_BorderLineColor;
}
set
{
m_BorderLineColor = value;
}
}
/// <summary>
/// 有边框线吗
/// </summary>
/// <value>
/// 有边框吗
/// </value>
public bool IsBorderLine
{
get
{
return m_IsBorderLine;
}
set
{
m_IsBorderLine = value;
this.Refresh();
}
}
#endregion
#region 样式
/// <summary>
/// 设置样式
/// </summary>
public LabelPanelStyle SetLabelPanelStyle
{
get
{
return m_SetLabelPanelStyle;
}
set
{
m_SetLabelPanelStyle = value;
this.Refresh();
}
}
#endregion
#region 背景
/// <summary>
/// 是否填充背景
/// </summary>
public bool IsFillBackGround
{
get
{
return m_IsFillBackGround;
}
set
{
m_IsFillBackGround = value;
this.Refresh();
}
}
/// <summary>
/// 背景渐变色1
/// </summary>
public Color FillGradualColor1
{
get
{
return m_FillGradualColor1;
}
set
{
m_FillGradualColor1 = value;
this.Refresh();
}
}
/// <summary>
/// 背景渐变色2
/// </summary>
public Color FillGradualColor2
{
get
{
return m_FillGradualColor2;
}
set
{
m_FillGradualColor2 = value;
this.Refresh();
}
}
/// <summary>
/// 背景渐变方式
/// </summary>
public LinearGradientMode SetBackGroundGradineMode
{
get
{
return m_SetBackGroundGradineMode;
}
set
{
m_SetBackGroundGradineMode = value;
this.Refresh();
}
}
#endregion
#endregion
#region 方法
/// <summary>
/// 绘制边线
/// </summary>
/// <param name="g"></param>
void DrawBorder(Graphics g)
{
Rectangle rect = new Rectangle(0,0,this.Bounds.Width-1,this.Bounds.Height-1);
g.DrawRectangle(new Pen(m_BorderLineColor, m_BorderLineWidth), rect);
}
/// <summary>
/// 绘制填充的背景
/// </summary>
/// <param name="g"></param>
void DrawFillBackGroundGradual(Graphics g)
{
Rectangle rect = new Rectangle(1, 1, this.Bounds.Width - 2, this.Bounds.Height - 2);
if (rect.Height < 1 || rect.Height < 1)
{
return;
}
g.FillRectangle(new LinearGradientBrush(rect, m_FillGradualColor1,
m_FillGradualColor2, m_SetBackGroundGradineMode), rect);
}
#endregion
#region 事件处理
/// <summary>
/// 组件重绘
/// </summary>
/// <param name="sender">object</param>
/// <param name="e">PaintEventArgs</param>
void LabelPanel_Paint(object sender, PaintEventArgs e)
{
if (m_IsBorderLine)
{
DrawBorder(e.Graphics);
}
if (m_IsFillBackGround)
{
DrawFillBackGroundGradual(e.Graphics);
}
}
#endregion
}
}
复制此代码,即可运行