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#中所有控件的源头是隐藏。Code

Control 

class副本。它拥有所有你想要脱离控制和MSDN的特性 很好地描述了特性。如果您正在创作一个新的控件和您的控件 将类似于现有的标准控制,你会做得好吗 扩展这个类。在我们的示例中,我们扩展了Button类。来 创建一个包含复选框和显示图像而不是文本的列表框 扩展CheckedListBox类。如果您要创建控件 从零开始,它和你知道的任何控件都没有行为上的相似之处 的,您希望扩展UserControl类。你可以创建 复合控件也使用UserControl。 基本的哲学 创建圆形按钮的基本理念很简单 扩展Button类,拥有一个绘图处理程序draw 处理程序中的椭圆。然而,还有其他的复杂之处。如果你是 有了自己的绘图处理程序,就不会调用默认值 油漆处理程序,这意味着更多的责任: 您必须为按钮设置区域,以便如果 用户单击在边界圆之外但在范围内的点 边框,不能转换为单击。 你会影响其他与绘图相关的属性,如: 文本,图像和背景。如果你没有调用默认隐藏复制CodePaint处理程序,您必须绘制文本和图像,按用户需要对齐 他们。 拉代码 时间代码。下面,我将简要描述这些步骤 我开发了这个按钮。 步骤1 简单的圆形按钮。视觉效果。在行为上类似于 矩形按钮。我们创建了一支笔和一个画笔。钢笔,用来画 边界椭圆/圆;笔刷:填充椭圆的内部。 隐藏,复制Code

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 在边界圆外但在边界矩形内的点, 这被解释为单击。 为了解决这个问题,我们在Hide中添加以下代码复制code

OnPaint 

以正确设置窗口区域: 隐藏,复制Code

GraphicsPath path = new GraphicsPath();
path.AddEllipse(0, 0, ClientSize.Width, ClientSize.Height);
this.Region = new Region(path);

步骤3 其余的代码应该易于解释。我有 开发的函数,一步一步,使着色代码更有吸引力 修复问题,因为我们避免调用默认隐藏Code

Paint 

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拷贝code

TextAlign 

当前被忽略。图像当前绘制在中心和 文本坐标取决于属性TextStartPoint。 参考文献 圆形按钮- http://www.codeproject.com/buttonctrl/roundbuttons.asp, 由克里斯徘徊 本文转载于:http://www.diyabc.com/frontweb/news700.html

你可能感兴趣的:(c#中的圆形按钮)