C#winform实现像触摸屏按钮那样的开关

触摸屏的按钮开发起来非常方便,只要设置好样式和文本,以及绑定的变量,一个开关就做好了。

而用winform要实现同样的功能,要编写许多代码。

花木兰控件库的ToggleButton可以这样做切换,但是有几点不方便的地方。于是修改了以下几点:

  1. 文本修改成可以换行:
    在这里插入图片描述
    文本居中且可以自动换行,而且通过修改Padding可以设置每一行显示多少个字,比如我要改成每行最多三个字:
    在这里插入图片描述
  2. 圆角修改成可以设置
    在这里插入图片描述
  3. 点击时切换文本
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    最终效果就是点击切换状态、背景和文本。
    查看按钮的状态。
private void toggleButton1_Click(object sender, EventArgs e)
{
   
    HML.ToggleButton btn = (HML.ToggleButton)sender;
    MessageBox.Show(btn.Checked.ToString());
}

控件库源码:添加链接描述
打开解决方案把 HML 项目里面的 ToggleButton 的代码替换成下面的代码,把HML项目重新生成,获得 HML.ComplexityPropertys.dll 和 HML.dll 文件,引入自己的项目即可。

using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace HML
{
   
    /// <summary>
    /// 开关按钮控件
    /// </summary>
    [Description("开关按钮控件")]
    [ToolboxItem(true)]
    [DefaultProperty("Checked")]
    [DefaultEvent("Click")]
    [TypeConverter(typeof(PropertyOrderConverter))]
    [ToolboxBitmap(typeof(ToggleButton), "Controls.ToggleButton.ToggleButton.bmp")]
    public class ToggleButton : MainThreadAnimationControl
    {
   
        #region 新增事件

        private static readonly object EventCheckedChanged = new object();
        /// <summary>
        /// 开关状态更改事件
        /// </summary>
        [Description("开关状态更改事件")]
        public event EventHandler CheckedChanged
        {
   
            add {
    Events.AddHandler(EventCheckedChanged, value); }
            remove {
    Events.RemoveHandler(EventCheckedChanged, value); }
        }

        #endregion

        #region 停用事件

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event EventHandler RightToLeftChanged
        {
   
            add {
    base.RightToLeftChanged += value; }
            remove {
    base.RightToLeftChanged -= value; }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event EventHandler ImeModeChanged
        {
   
            add {
    base.ImeModeChanged += value; }
            remove {
    base.ImeModeChanged -= value; }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event EventHandler BackColorChanged
        {
   
            add {
    base.BackColorChanged += value; }
            remove {
    base.BackColorChanged -= value; }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event EventHandler ForeColorChanged
        {
   
            add {
    base.ForeColorChanged += value; }
            remove {
    base.ForeColorChanged -= value; }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event EventHandler BackgroundImageChanged
        {
   
            add {
    base.BackgroundImageChanged += value; }
            remove {
    base.BackgroundImageChanged -= value; }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event EventHandler BackgroundImageLayoutChanged
        {
   
            add {
    base.BackgroundImageLayoutChanged += value; }
            remove {
    base.BackgroundImageLayoutChanged -= value; }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event EventHandler DoubleClick
        {
   
            add {
    base.DoubleClick += value; }
            remove {
    base.DoubleClick -= value; }
        }

        [Browsable(false)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public new event MouseEventHandler MouseDoubleClick
        {
   
            add {
    base.MouseDoubleClick += value; }
            remove {
    base.MouseDoubleClick -= value; }
        }

        #endregion

        #region 新增属性
        private string textChecked="中转爪已闭合";
        /// <summary>
        /// 图标Size
        /// </summary>
        [Description("按钮Checked文本")]
        [Category("杂项")]
        [DefaultValue(typeof(string), "中转爪已闭合")]
        public string TextChecked
        {
   
            get {
    return textChecked; }
            set {
    textChecked = value; Invalidate(); }
        }
        private string textUnChecked = "中转爪已打开";
        /// <summary>
        /// 图标Size
        /// </summary>
        [Description("按钮UnChecked文本")]
        [Category("杂项")]
        [DefaultValue(typeof(string), "中转爪已打开")]
        public string TextUnChecked
        {
   
            get {
    return textUnChecked; }
            set {
    textUnChecked = value; Invalidate(); }
        }
        private int cornerRadius = 10;
        /// <summary>
        /// 图标Size
        /// </summary>
        [Description("按钮圆角角度")]
        [Category("杂项")]
        [DefaultValue(typeof(int), "10")]
        public int CornerRadius
        {
   
            get {
    return cornerRadius; }
            set {
    cornerRadius = value; Invalidate(); }
        }

        private float paddingLR = 30;
        /// <summary>
        /// 图标Size
        /// </summary>
        [Description("按钮左右内边距")]
        [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值