c#中的圆形按钮
介绍
本例中显示的按钮是分阶段开发的。我将 一个接一个地引导您完成这些步骤,以便您可以创建自定义控件 自己很容易。圆形按钮是椭圆按钮的特殊情况。
概述
我写这篇文章的动机开始于我试图 模拟视窗媒体播放器的圆形按钮。我想创建一个自定义 c#中的控件和圆形按钮是开发人员普遍尝试的控件 在实现自定义控件时实现。我搜索了codeproject和谷歌, 没有,我决定自己创造一个。
在c#中创建自定义控件比在MFC中更容易, 由于整柜。Chris Maunder写过一篇关于如何创建 椭圆按钮使用MFC。由于某些原因,本示例中的代码看起来更简单 FCL函数是免费的。
这个按钮有什么特别的
我开发的按钮有以下属性:
- 它是椭圆的/圆的
- HoverColor -按钮时的颜色 鼠标经过它
- 我们开始的点 绘制按钮文本。坐标相对于左上角 按钮的边界矩形。
- ColorGradient -这个参数允许你 树荫下的按钮。指示您想要的颜色过渡的锐度。
- 表示每个有多少 像素你想改变颜色。
- 淡出-表示如果你想要更深的颜色 外面或里面。对于沿边缘较深的颜色表示为真,对于沿边缘较深的颜色表示为假 打火机。
为什么要使用圆形按钮?
为什么要创建一个圆形按钮呢?首先,如果你 想要漂亮的UI。其次,如果一个常规的矩形按钮没有一个好,为 例如,它看起来像雪茄。Windows媒体播放器的播放按钮模仿 如今多媒体播放器上的圆形按钮更多地传达了这一理念 比长方形的要准确。
在c#中创建圆形按钮更容易,而且你也可以这样做 如果你想让它与其他软件无缝集成,你可以使用。net来创建它 UI开发环境,如VB.Net。为了使用它,你需要一个 安装了。net框架的操作系统。以替换按钮 在现有项目中使用这个新单词时,需要替换该单词 按钮按圆形按钮在 初始化ecomponents()函数,并添加一个引用 到此按钮的dll托管代码。
c#背景
c#中所有控件的母控件是
Control类。它拥有所有你想要脱离控制和MSDN的特性 很好地描述了特性。如果您正在创作一个新的控件和您的控件 将类似于现有的标准控制,你会做得好吗 扩展这个类。在我们的示例中,我们扩展
按钮
类。来 创建一个包含复选框和显示图像而不是文本的列表框 扩展CheckedListBox
类。如果您要创建控件 从零开始,它和你知道的任何控件都没有行为上的相似之处 的,你想扩展用户控件
类。你可以创建 复合控件也使用用户控件
。
基本的哲学
创建圆形按钮的基本理念很简单 扩展Button类,拥有一个绘图处理程序draw 处理程序中的椭圆。然而,还有其他的复杂之处。如果你是 有了自己的绘图处理程序,就不会调用默认值 油漆处理程序,这意味着更多的责任:
- 您必须为按钮设置区域,以便如果 用户单击在边界圆之外但在范围内的点 边框,不能转换为单击。 你会影响其他与绘图相关的属性,如: 文本,图像和背景。如果你没有调用默认隐藏复制CodePaint处理程序,您必须绘制文本和图像,按用户需要对齐 他们。
拉代码
时间代码。下面,我将简要描述这些步骤 我开发了这个按钮。
步骤1
简单的圆形按钮。视觉效果。在行为上类似于 矩形按钮。我们创建了一支笔和一个画笔。钢笔,用来画 边界椭圆/圆;笔刷:填充椭圆的内部。
constructor: { _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 在边界圆外但在边界矩形内的点, 这被解释为单击。
为了解决这个问题,我们添加以下代码
OnPaint要正确设置窗口区域:
GraphicsPath path = new GraphicsPath(); path.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height); this.Region = new Region(path);
步骤3
其余的代码应该易于解释。我有 开发的函数,一步一步,使着色代码更有吸引力 修复问题,因为我们避免调用默认值
Paint处理程序。我调用了在按钮内作画的函数 在
OnPaint ()
作为ColorButton
,并发展了不同的 版本的ColorButton()。
功能概述:
- ColorButton1 -平的着色 按钮
- ColorButton2 -用颜色填充颜色 梯度。颜色向右下角变深。
- ColorButton3 -用颜色填充颜色 梯度。颜色越往中心越深。尊重image属性集 由用户
- 增加淡入/淡出属性。 颜色向中心变浅(淡出)或变深(淡出)。
- ColorButton5 -隐藏复制CodeColorButton4修改,以接受钢笔和画笔参数。hover-coloring所需。我 为MouseEnter和MouseLeave添加处理程序到颜色 鼠标悬停时的按钮不同。绘制一个焦点矩形时的按钮 有焦点。
使用按钮
在新项目中,转到工具箱,添加/删除项, 浏览并指向按钮的dll。在现有项目中,更改文本 Systems.Windows.Forms。按钮 AdvButton.RoundButton。
已知的问题
这些是已知的问题:
- 它忽略了TextAlign属性
- 它忽略了ImageAlign属性
- 不给一个完美的3D外观,因此,属性 FlatStyle被忽略
其他的考虑
请注意,我们已处理:
- Windows易访问性需求
- 本地化的问题。将出现用从右到左的语言编写的文本 很好。
未来的改进
属性ImageAlign和
TextAlign目前忽略。图像当前绘制在中心和 文本坐标取决于属性
TextStartPoint
。
参考文献
- 圆形按钮- http://www.codeproject.com/buttonctrl/roundbuttons.asp, 由克里斯徘徊
本文转载于:http://www.diyabc.com/frontweb/news14651.html