using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace test
{
public partial class CustomButton : Button
{
///
/// 原始背景颜色
///
private Color defaultBgColor = Color.FromArgb(1, 2, 3);
///
/// 背景颜色
///
private Color bgColor = Color.FromArgb(1, 2, 3);
///
/// 自定义背景颜色
///
private Color _customBgColor = Color.FromArgb(34, 116, 70);
///
/// 中途改变背景色
///
private bool isChangeBgColor = false;
public CustomButton()
{
InitializeComponent();
}
///
/// 重绘
///
///
///
private void ParenButton_Paint(object sender, PaintEventArgs e)
{
if (defaultBgColor == Color.FromArgb(1, 2, 3))
{
//存在自定义颜色
if (_customBgColor != Color.FromArgb(34, 116, 70))
{
bgColor = _customBgColor;
defaultBgColor = _customBgColor;
}
else
{
bgColor = Color.Green;
defaultBgColor = Color.Green;
}
}
if (isChangeBgColor)
{
isChangeBgColor = false;
bgColor = _customBgColor;
defaultBgColor = _customBgColor;
}
//绘制倒角
drawRadius(e);
}
///
/// 绘制倒角
///
public void drawRadius(PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;//抗锯齿
int nRadius = 4;//圆角半径
GraphicsPath gp = new GraphicsPath();
int nWidth = e.ClipRectangle.Width - 1;
int nHeight = e.ClipRectangle.Height - 1;
//左上角
gp.AddArc(e.ClipRectangle.X, e.ClipRectangle.Y, nRadius, nRadius, 180, 90);
//右上角
gp.AddArc(nWidth - nRadius, e.ClipRectangle.Y, nRadius, nRadius, 270, 90);
//右下角
gp.AddArc(nWidth - nRadius, nHeight - nRadius, nRadius, nRadius, 0, 90);
//左下角
gp.AddArc(e.ClipRectangle.X, nHeight - nRadius, nRadius, nRadius, 90, 90);
//闭合曲线
gp.CloseAllFigures();
//按钮启用背景颜色
if (this.Enabled)
{
e.Graphics.FillPath(new SolidBrush(bgColor), gp);
}
//按钮禁用背景颜色
else
{
e.Graphics.FillPath(new SolidBrush(Color.Gray), gp);
}
//改变字体
if ("宋体".Equals(this.Font.Name) && this.Font.Size == 9f)
{
this.Font = new Font(new FontFamily("微软雅黑"), 9.75F);
}
PointF textPoint = new PointF();
SizeF textSize = TextRenderer.MeasureText(this.Text, this.Font);
SolidBrush brush = null;
//按钮启用字体颜色
if (this.Enabled)
{
brush = new SolidBrush(Color.White);
}
//按钮禁用字体颜色(可以自定义)
else
{
brush = new SolidBrush(Color.White);
}
//文字居中显示
textPoint.X = e.ClipRectangle.X + (e.ClipRectangle.Width - textSize.Width) / 2;
textPoint.Y = e.ClipRectangle.Y + (e.ClipRectangle.Height - textSize.Height) / 2 + 1;
//绘制文字
e.Graphics.DrawString(this.Text, this.Font, brush, textPoint.X, textPoint.Y);
}
#region 鼠标按钮事件
///
/// 鼠标按下
///
///
///
private void LhParenButton_MouseDown(object sender, MouseEventArgs e)
{
// 获取鼠标按下颜色
bgColor = getMouseDownColor();
//重绘控件
this.Invalidate();
}
///
/// 鼠标弹起
///
///
///
private void LhParenButton_MouseUp(object sender, MouseEventArgs e)
{
bgColor = defaultBgColor;
this.Invalidate();
}
///
/// 鼠标移入
///
///
///
private void LhParenButton_MouseHover(object sender, EventArgs e)
{
//获取鼠标移入颜色
bgColor = getMouseHoverColor();
this.Invalidate();
}
///
/// 鼠标移出
///
///
///
private void LhParenButton_MouseLeave(object sender, EventArgs e)
{
bgColor = defaultBgColor;
this.Invalidate();
}
///
/// 获取鼠标按下颜色
///
///
private Color getMouseDownColor()
{
byte r = getSingleColor(defaultBgColor.R, 80);
byte g = getSingleColor(defaultBgColor.G, 80);
byte b = getSingleColor(defaultBgColor.B, 80);
return Color.FromArgb(r, g, b);
}
///
/// 获取鼠标移入颜色
///
///
private Color getMouseHoverColor()
{
byte r = getSingleColor(defaultBgColor.R, 40);
byte g = getSingleColor(defaultBgColor.G, 40);
byte b = getSingleColor(defaultBgColor.B, 40);
return Color.FromArgb(r, g, b);
}
///
/// 获取单个颜色值
///
/// 单个颜色值
/// 增加值
///
private byte getSingleColor(byte color, byte addValue)
{
int newColor = color + addValue;
newColor = newColor > 255 ? 255 : newColor;
return byte.Parse(newColor.ToString());
}
#endregion
[Description("背景颜色"), Category("自定义属性")]
// 控件的自定义属性值
public Color customBgColor
{
get
{
return _customBgColor;
}
set
{
_customBgColor = value;
//中途改变背景颜色
if (defaultBgColor != Color.FromArgb(1, 2, 3))
{
isChangeBgColor = true;
}
this.Invalidate();
}
}
}
}