c#中的圆形按钮

下载source
files - 7 Kb
下载demo
project - 8 Kb

介绍
本例中显示的按钮是分阶段开发的。我将
一个接一个地引导您完成这些步骤,以便您可以创建自定义控件
自己很容易。圆形按钮是椭圆按钮的特殊情况。
概述
我写这篇文章的动机开始于我试图
模拟视窗媒体播放器的圆形按钮。我想创建一个自定义
c#中的控件和圆形按钮是开发人员普遍尝试的控件
在实现自定义控件时实现。我搜索了codeproject和谷歌,
没有,我决定自己创造一个。

在c#中创建自定义控件比在MFC中更容易,
由于整柜。Chris Maunder写过一篇关于如何创建
椭圆按钮使用MFC。由于某些原因,本示例中的代码看起来更简单
FCL函数是免费的。

这个按钮有什么特别的
我开发的按钮有以下属性:

它是椭圆的/圆的

HoverColor -按钮时的颜色
鼠标经过它

我们开始的点
绘制按钮文本。坐标相对于左上角
按钮的边界矩形。

ColorGradient -这个参数允许你
树荫下的按钮。指示您想要的颜色过渡的锐度。

表示每个有多少
像素你想改变颜色。

淡出-表示如果你想要更深的颜色
外面或里面。对于沿边缘较深的颜色表示为真,对于沿边缘较深的颜色表示为假
打火机。
为什么要使用圆形按钮?
为什么要创建一个圆形按钮呢?首先,如果你
想要漂亮的UI。其次,如果一个常规的矩形按钮没有一个好,为
例如,它看起来像雪茄。Windows媒体播放器的播放按钮模仿
如今多媒体播放器上的圆形按钮更多地传达了这一理念
比长方形的要准确。

在c#中创建圆形按钮更容易,而且你也可以这样做
如果你想让它与其他软件无缝集成,你可以使用。net来创建它
UI开发环境,如VB.Net。为了使用它,你需要一个
安装了。net框架的操作系统。以替换按钮
在现有项目中使用这个新单词时,需要替换该单词
按钮按圆形按钮在
初始化ecomponents()函数,并添加一个引用
到此按钮的dll托管代码。

c#背景

c#中所有控件的源头是隐藏。CodeControl class副本。它拥有所有你想要脱离控制和MSDN的特性
很好地描述了特性。如果您正在创作一个新的控件和您的控件
将类似于现有的标准控制,你会做得好吗
扩展这个类。在我们的示例中,我们扩展了Button类。来
创建一个包含复选框和显示图像而不是文本的列表框
扩展CheckedListBox类。如果您要创建控件
从零开始,它和你知道的任何控件都没有行为上的相似之处
的,您希望扩展UserControl类。你可以创建
复合控件也使用UserControl。

基本的哲学
创建圆形按钮的基本理念很简单
扩展Button类,拥有一个绘图处理程序draw
处理程序中的椭圆。然而,还有其他的复杂之处。如果你是
有了自己的绘图处理程序,就不会调用默认值
油漆处理程序,这意味着更多的责任:

您必须为按钮设置区域,以便如果
用户单击在边界圆之外但在范围内的点
边框,不能转换为单击。

你会影响其他与绘图相关的属性,如:
文本,图像和背景。如果你没有调用默认隐藏复制CodePaint处理程序,您必须绘制文本和图像,按用户需要对齐
他们。
拉代码
时间代码。下面,我将简要描述这些步骤
我开发了这个按钮。

步骤1
简单的圆形按钮。视觉效果。在行为上类似于
矩形按钮。我们创建了一支笔和一个画笔。钢笔,用来画
边界椭圆/圆;笔刷:填充椭圆的内部。
隐藏,复制Codeconstructor:
{
_pen = new Pen(_color);
_brush = new SolidBrush(Color.FromKnownColor (KnownColor.Control));
_brushInside = new SolidBrush(_color);
}

// OnPaint…
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
g.FillRectangle(_brush, 0, 0, ClientSize.Width, ClientSize.Height);
g.DrawEllipse(_pen, 0, 0, ClientSize.Width, ClientSize.Height);
g.FillEllipse(_brushInside, 0, 0, ClientSize.Width, ClientSize.Height);
}

此外,您希望公开一个颜色属性,该属性
终端用户可以在设计模式下填充。

步骤2
步骤1中的实现有一个bug:如果单击a
在边界圆外但在边界矩形内的点,
这被解释为单击。

为了解决这个问题,我们在Hide中添加以下代码复制codeOnPaint 以正确设置窗口区域:
隐藏,复制CodeGraphicsPath path = new GraphicsPath();
path.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height);
this.Region = new Region(path);

步骤3
其余的代码应该易于解释。我有
开发的函数,一步一步,使着色代码更有吸引力
修复问题,因为我们避免调用默认隐藏CodePaint handler副本。我调用了在按钮内作画的函数
在OnPaint()中作为ColorButton,并开发了d数字后
版本的ColorButton()。

功能概述:

ColorButton1 -平的着色
按钮

ColorButton2 -用颜色填充颜色
梯度。颜色向右下角变深。

ColorButton3 -用颜色填充颜色
梯度。颜色越往中心越深。尊重image属性集
由用户

增加淡入/淡出属性。
颜色向中心变浅(淡出)或变深(淡出)。

ColorButton5 -隐藏复制CodeColorButton4修改,以接受钢笔和画笔参数。hover-coloring所需。我
为MouseEnter和MouseLeave添加处理程序到颜色
鼠标悬停时的按钮不同。绘制一个焦点矩形时的按钮
有焦点。
使用按钮

在新项目中,转到工具箱,添加/删除项,
浏览并指向按钮的dll。在现有项目中,更改文本
Systems.Windows.Forms。按钮
AdvButton.RoundButton。

已知的问题
这些是已知的问题:

它忽略了TextAlign属性

它忽略了ImageAlign属性

不给一个完美的3D外观,因此,属性
FlatStyle被忽略

其他的考虑
请注意,我们已处理:

Windows易访问性需求
本地化的问题。将出现用从右到左的语言编写的文本
很好。
未来的改进
属性ImageAlign和Hide拷贝codeTextAlign 当前被忽略。图像当前绘制在中心和
文本坐标取决于属性TextStartPoint。

参考文献

圆形按钮- http://www.codeproject.com/buttonctrl/roundbuttons.asp,
由克里斯徘徊

本文转载于:http://www.diyabc.com/frontweb/news700.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值