Visual Studio .NET 2002.NET 1.0Windows 2003.NET 1.1Windows 2000Windows XP中级开发Visual StudioWindows.NETC#
带颜色和形状的自定义按钮






3.25/5 (32投票s)
2004年4月29日

265570

9753
另一个简单的具有颜色和形状的自定义按钮控件。
引言
这是我的第一个 C# 自定义控件。请下载演示程序并点击一下。
特点
用户可以定义
- Color
- 边框颜色
- 正常颜色 A
- 正常颜色 B
- 悬停颜色 A
- 悬停颜色 B
- 渐变样式
- Horizontal
- 垂直
- 前向对角线
- 后向对角线
- 按钮样式
- 矩形
- 椭圆
- 平滑质量
- 无(清晰)
- 高速
- 抗锯齿
- 高质量
你实际上可以感受到它的点击,因为它具有扁平的样式!
OnPaint() 中使用的关键技术
SmoothingMode
//
// set SmoothingMode
//
switch (_SmoothingQuality)
{
case SmoothingQualities.None:
e.Graphics.SmoothingMode = SmoothingMode.Default;
break;
case SmoothingQualities.HighSpeed:
e.Graphics.SmoothingMode = SmoothingMode.HighSpeed;
break;
case SmoothingQualities.AntiAlias:
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
break;
case SmoothingQualities.HighQuality:
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
break;
}
LinearGradientMode
//
// mode declaration
//
LinearGradientMode mode;
//
// set LinearGradientMode
//
switch (_GradientStyle)
{
case GradientStyles.Horizontal:
mode = LinearGradientMode.Horizontal;
break;
case GradientStyles.Vertical:
mode = LinearGradientMode.Vertical;
break;
case GradientStyles.ForwardDiagonal:
mode = LinearGradientMode.ForwardDiagonal;
break;
case GradientStyles.BackwardDiagonal:
mode = LinearGradientMode.BackwardDiagonal;
break;
default:
mode = LinearGradientMode.Vertical;
break;
}
LinearGradientBrush
//
// brush declaration
//
LinearGradientBrush brush;
switch (_State)
{
case _States.Normal:
brush = new LinearGradientBrush(newRect,
_NormalColorA, _NormalColorB, mode);
switch (_ButtonStyle)
{
case ButtonStyles.Rectangle:
e.Graphics.FillRectangle(brush, newRect);
e.Graphics.DrawRectangle(new
Pen(_NormalBorderColor, 1), newRect);
break;
case ButtonStyles.Ellipse:
e.Graphics.FillEllipse(brush, newRect);
e.Graphics.DrawEllipse(new
Pen(_NormalBorderColor, 1), newRect);
break;
}
e.Graphics.DrawString(this.Text, base.Font,
new SolidBrush(base.ForeColor), textX, textY);
break;
case _States.MouseOver:
brush = new LinearGradientBrush(newRect,
_HoverColorA, _HoverColorB, mode);
switch (_ButtonStyle)
{
case ButtonStyles.Rectangle:
e.Graphics.FillRectangle(brush, newRect);
e.Graphics.DrawRectangle(new
Pen(_HoverBorderColor, 1), newRect);
break;
case ButtonStyles.Ellipse:
e.Graphics.FillEllipse(brush, newRect);
e.Graphics.DrawEllipse(new
Pen(_HoverBorderColor, 1), newRect);
break;
}
e.Graphics.DrawString(this.Text, base.Font,
new SolidBrush(base.ForeColor), textX, textY);
break;
case _States.Clicked:
brush = new LinearGradientBrush(newRect,
_HoverColorA, _HoverColorB, mode);
switch (_ButtonStyle)
{
case ButtonStyles.Rectangle:
e.Graphics.FillRectangle(brush, newRect);
e.Graphics.DrawRectangle(new
Pen(_HoverBorderColor, 2), newRect);
break;
case ButtonStyles.Ellipse:
e.Graphics.FillEllipse(brush, newRect);
e.Graphics.DrawEllipse(new
Pen(_HoverBorderColor, 2), newRect);
break;
}
e.Graphics.DrawString(this.Text, base.Font,
new SolidBrush(base.ForeColor),
textX + 1, textY + 1);
break;
}
我的其他控件项目
反馈
请为这篇文章投票。
并 通过电子邮件联系我或留下你的消息,如果你有
- 错误报告
- 代码改进
- 任何评论或建议。