• c#中的圆形按钮


    Image 1

    介绍

    本例中显示的按钮是分阶段开发的。我将 一个接一个地引导您完成这些步骤,以便您可以创建自定义控件 自己很容易。圆形按钮是椭圆按钮的特殊情况。

    概述

    我写这篇文章的动机开始于我试图 模拟视窗媒体播放器的圆形按钮。我想创建一个自定义 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

  • 相关阅读:
    特别实用的 6 款 Python 特殊文本格式处理库推荐
    小白版Python环境搭建,还不会你就掐死小编吧(建议收藏)
    Python抓取网页数据的终极办法
    Neo4j CQL -(17)- NULL值
    Neo4j CQL -(16)- 合并
    Neo4j CQL -(15)- LIMIT和SKIP子句
    Neo4j CQL -(14) -UNION联合
    Neo4j CQL
    Neo4j CQL
    Neo4j CQL
  • 原文地址:https://www.cnblogs.com/Dincat/p/13488395.html
Copyright © 2020-2023  润新知