Windows窗体中的切换开关控件

高宝亚达夫

我正在使用来设计一个Toggle Switch控件CheckBox,但目前我的控件仅绘制了一个圆圈。如何绘制下图所示的圆形,如何根据控件的值更改圆的位置以表示下图所示的选中和未选中状态:

在此处输入图片说明

这是我的代码:

public class MyCheckBox:CheckBox
{
    public MyCheckBox()
    {
        this.Appearance = System.Windows.Forms.Appearance.Button;
        this.BackColor = Color.Transparent;
        this.TextAlign = ContentAlignment.MiddleCenter;
        this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        this.FlatAppearance.BorderColor = Color.RoyalBlue;
        this.FlatAppearance.BorderSize = 2;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        this.OnPaintBackground(e);
        using (var path = new GraphicsPath())
        {
            var c = e.Graphics.ClipBounds;
            var r = this.ClientRectangle;
            r.Inflate(-FlatAppearance.BorderSize, -FlatAppearance.BorderSize);
            path.AddEllipse(r);
            e.Graphics.SetClip(path);
            base.OnPaint(e);
            e.Graphics.SetClip(c);
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            if (this.Checked)
            {
                using (var p = new Pen(FlatAppearance.BorderColor,
                                       FlatAppearance.BorderSize))
                {
                    e.Graphics.DrawEllipse(p, r);
                }
            }
        }
    }
}
雷扎·阿盖伊(Reza Aghaei)

我知道这是一个问题。但是您可能想看看拨动开关或阅读有关通用Windows应用程序组件的更多信息

无论如何,这是Windows窗体开发人员的答案。它显示了我们如何自定义复选框的呈现方式以具有这种外观。

目前,您仅绘制椭圆,它是一个安静的切换按钮。但是,如果要像下面的图像一样显示它,则应首先为背景画一个圆形,然后根据Checked值画一个检查圆圈。使用答案示例部分中的代码,您可以CheckBox使用以下用户界面:

在此处输入图片说明

例子

关于此示例的重要一点是,它完全是一个CheckBox控件,并支持使用鼠标和键盘进行检查,还支持的数据绑定和所有其他标准功能CheckBox该代码不是完美的,但是是使用“是/否”切换开关的一个很好的起点:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
public class MyCheckBox : CheckBox
{
    public MyCheckBox()
    {
        SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
        Padding = new Padding(6);
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        this.OnPaintBackground(e);
        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
        using (var path = new GraphicsPath())
        {
            var d = Padding.All;
            var r = this.Height - 2 * d;
            path.AddArc(d, d, r, r, 90, 180);
            path.AddArc(this.Width - r - d, d, r, r, -90, 180);
            path.CloseFigure();
            e.Graphics.FillPath(Checked ? Brushes.DarkGray : Brushes.LightGray, path);
            r = Height - 1;
            var rect = Checked ? new Rectangle(Width - r - 1, 0, r, r)
                               : new Rectangle(0, 0, r, r);
            e.Graphics.FillEllipse(Checked ? Brushes.Green : Brushes.WhiteSmoke, rect);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Windows窗体中的切换开关控件

来自分类Dev

在formarray控件和另一个窗体控件之间切换是否无法在angular中工作?

来自分类Dev

切换开关css

来自分类Dev

切换开关颜色Windows Phone 8

来自分类Dev

在 Windows 窗体之间切换时的闪烁效果

来自分类Dev

在Flutter中按切换开关上的小部件

来自分类Dev

切换开关在 PartialView 中不起作用

来自分类Dev

如何在Visual Studio 2012的Windows Phone 8.0应用程序中添加切换开关按钮?

来自分类Dev

在用户控件中的状态之间切换

来自分类Dev

切换开关:更改光标指针

来自分类Dev

首先先关闭切换开关

来自分类Dev

jQuery Div切换开关

来自分类Dev

定制开关切换按钮

来自分类Dev

如何使用Rails切换开关?

来自分类Dev

动态更改切换开关状态

来自分类Dev

如何制作一个列表和网格视图切换开关控件,以在AngularJS中加载局部控件?

来自分类Dev

如何制作一个列表和网格视图切换开关控件,以在AngularJS中加载局部控件?

来自分类Dev

jQuery切换开关以编程方式打开关闭

来自分类Dev

默认情况下,当不进行切换时,开关控件显示为淡入淡出

来自分类Dev

设置Windows Phone工具箱切换开关的状态

来自分类Dev

设置Windows Phone工具箱切换开关的状态

来自分类Dev

音频控件的Javascript按钮切换

来自分类Dev

动态切换 WPF UI 控件

来自分类Dev

如何在2个Windows窗体之间来回切换

来自分类Dev

在父控件中处理PreviewMouseDown-Event之后,WPF切换按钮未切换

来自分类Dev

Chrome扩展程序中的所有选项卡中设置切换开关状态

来自分类Dev

如何在WinJS应用中读取切换开关的值

来自分类Dev

切换开关按钮在reactJs应用程序中不起作用

来自分类Dev

如何在PowerShell中通过切换将开关参数作为变量传递?

Related 相关文章

  1. 1

    Windows窗体中的切换开关控件

  2. 2

    在formarray控件和另一个窗体控件之间切换是否无法在angular中工作?

  3. 3

    切换开关css

  4. 4

    切换开关颜色Windows Phone 8

  5. 5

    在 Windows 窗体之间切换时的闪烁效果

  6. 6

    在Flutter中按切换开关上的小部件

  7. 7

    切换开关在 PartialView 中不起作用

  8. 8

    如何在Visual Studio 2012的Windows Phone 8.0应用程序中添加切换开关按钮?

  9. 9

    在用户控件中的状态之间切换

  10. 10

    切换开关:更改光标指针

  11. 11

    首先先关闭切换开关

  12. 12

    jQuery Div切换开关

  13. 13

    定制开关切换按钮

  14. 14

    如何使用Rails切换开关?

  15. 15

    动态更改切换开关状态

  16. 16

    如何制作一个列表和网格视图切换开关控件,以在AngularJS中加载局部控件?

  17. 17

    如何制作一个列表和网格视图切换开关控件,以在AngularJS中加载局部控件?

  18. 18

    jQuery切换开关以编程方式打开关闭

  19. 19

    默认情况下,当不进行切换时,开关控件显示为淡入淡出

  20. 20

    设置Windows Phone工具箱切换开关的状态

  21. 21

    设置Windows Phone工具箱切换开关的状态

  22. 22

    音频控件的Javascript按钮切换

  23. 23

    动态切换 WPF UI 控件

  24. 24

    如何在2个Windows窗体之间来回切换

  25. 25

    在父控件中处理PreviewMouseDown-Event之后,WPF切换按钮未切换

  26. 26

    Chrome扩展程序中的所有选项卡中设置切换开关状态

  27. 27

    如何在WinJS应用中读取切换开关的值

  28. 28

    切换开关按钮在reactJs应用程序中不起作用

  29. 29

    如何在PowerShell中通过切换将开关参数作为变量传递?

热门标签

归档