vs中在工具箱添加自定义控件numberTextBox

在winform中没有numberTextBox控件,为了将numberTextBox添加到工具箱当中,于是参考以下博客封装了一个自定义numberTextBox控件:

winform 自定义数值(数字)输入框_c#如何设置一个框输入值-CSDN博客

接下来介绍以下封装和引用的过程:

1.先创建一个C#的生成dll的工程,然后将以下代码进去

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Widgets
{
    /// <summary>
    /// 数值输入框
    /// </summary>
    [ToolboxItem(true)]
    public class NumberTextBox : TextBox
    {
        /// <summary>
        /// 输入数值类型
        /// </summary>
        private NumberType numberType;

        /// <summary>
        /// 输入小数点,默认2位
        /// </summary>
        private int decimalPointNumber;

        /// <summary>
        /// 允许输入的最小值,空值即代表当前类型的最小值
        /// </summary>
        private string minValue;

        /// <summary>
        /// 允许输入的最大值,空值即代表当前类型的最大值
        /// </summary>
        private string maxValue;

        [Browsable(true)]
        [Category("NumberTextBox"), Description("指定控件数值输入的最小值"), DisplayName("最小值")]
        public string MinValue
        {
            get
            {
                return minValue;

            }
            set
            {
                if (string.IsNullOrWhiteSpace(value))
                {
                    minValue = "";
                }
                else if (numberType == NumberType.Integer)
                {
                    if (int.TryParse(value, out int result))
                    {
                        minValue = result.ToString();
                    }
                    else
                    {
                        minValue = "";
                    }

                }
                else if (numberType == NumberType.Long)
                {
                    if (long.TryParse(value, out long result))
                    {
                        minValue = result.ToString();
                    }
                    else
                    {
                        minValue = "";
                    }

                }
                else if (numberType == NumberType.Float)
                {
                    if (float.TryParse(value, out float result))
                    {
                        minValue = result.ToString("F" + decimalPointNumber);
                    }
                    else
                    {
                        minValue = "";
                    }

                }
                else if (numberType == NumberType.Double)
                {
                    if (double.TryParse(value, out double result))
                    {
                        minValue = result.ToString("F" + decimalPointNumber);
                    }
                    else
                    {
                        minValue = "";
                    }
                }
            }
        }

        [Browsable(true)]
        [Category("NumberTextBox"), Description("指定控件数值输入的最大值"), DisplayName("最大值")]
        public string MaxValue
        {
            get
            {
                return maxValue;
            }
            set
            {
                if (string.IsNullOrWhiteSpace(value))
                {
                    maxValue = "";
                }
                else if (numberType == NumberType.Integer)
                {
                    if (int.TryParse(value, out int result))
                    {
                        maxValue = result.ToString();
                    }
                    else
                    {
                        maxValue = "";
                    }

                }
                else if (numberType == NumberType.Long)
                {
                    if (long.TryParse(value, out long result))
                    {
                        maxValue = result.ToString();
                    }
                    else
                    {
                        maxValue = "";
                    }

                }
                else if (numberType == NumberType.Float)
                {
                    if (float.TryParse(value, out float result))
                    {
                        maxValue = result.ToString("F" + decimalPointNumber);
                    }
                    else
                    {
                        maxValue = "";
                    }

                }
                else if (numberType == NumberType.Double)
                {
                    if (double.TryParse(value, out double result))
                    {
                        maxValue = result.ToString("F" + decimalPointNumber);
                    }
                    else
                    {
                        maxValue = "";
                    }
                }
            }
        }

        [Browsable(true)]
        [Category("NumberTextBox"), Description("指定控件数值输入类型"), DisplayName("数值类型")]
        public NumberType NumberType
        {
            get => numberType; set => numberType = value; }

            [Browsable(true)]
            [Category("NumberTextBox"), Description("当指定输入数值类型为小数时保留小数点位数"), DisplayName("小数点位数")]
            [DefaultValue(2)]
            public int DecimalPointNumber
        {
            get => decimalPointNumber; set => decimalPointNumber = value; }

        protected override void OnTextChanged(EventArgs e)
        {
            base.OnTextChanged(e);
            if (string.IsNullOrWhiteSpace(Text) || Text == "-")//输入负值
            {
                return;
            }
            switch (numberType)
            {
                case NumberType.Integer:
                    if (!int.TryParse(Text, out var i))
                    {
                        Text = Text.Substring(0, Text.Length - 1);
                        SelectionStart = Text.Length;
                    }
                    break;
                case NumberType.Long:
                    if (!long.TryParse(Text, out var l))
                    {
                        Text = Text.Substring(0, Text.Length - 1);
                        SelectionStart = Text.Length;
                    }
                    break;
                case NumberType.Float:
                    if (!float.TryParse(Text, out var f))
                    {
                        Text = Text.Substring(0, Text.Length - 1);
                        SelectionStart = Text.Length;
                    }
                    break;
                case NumberType.Double:
                    if (!double.TryParse(Text, out var d))
                    {
                        Text = Text.Substring(0, Text.Length - 1);
                        SelectionStart = Text.Length;
                    }
                    break;
            }
        }

        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.KeyCode == Keys.Enter)
            {
                VerifyThenFormatValue();
            }
        }

        protected override void OnLostFocus(EventArgs e)
        {
            base.OnLostFocus(e);
            VerifyThenFormatValue();

        }

        private void VerifyThenFormatValue()
        {
            if (string.IsNullOrWhiteSpace(Text))
            {
                return;
            }
            if (numberType == NumberType.Float)
            {
                Text = float.Parse(Text).ToString("F" + decimalPointNumber).ToString();
            }
            else if (numberType == NumberType.Double)
            {
                Text = double.Parse(Text).ToString("F" + decimalPointNumber).ToString();
            }
            if (!string.IsNullOrWhiteSpace(minValue))
            {
                if (numberType == NumberType.Integer)
                {
                    if (int.Parse(Text) < int.Parse(minValue))
                    {
                        Text = minValue;
                    }
                }
                else if (numberType == NumberType.Long)
                {
                    if (long.Parse(Text) < long.Parse(minValue))
                    {
                        Text = MinValue;
                    }
                }
                else if (numberType == NumberType.Float)
                {
                    if (float.Parse(Text) < float.Parse(minValue))
                    {
                        Text = minValue;
                    }
                }
                else if (numberType == NumberType.Double)
                {
                    if (double.Parse(Text) < double.Parse(minValue))
                    {
                        Text = minValue;
                    }
                }
            }
            if (!string.IsNullOrWhiteSpace(maxValue))
            {
                if (numberType == NumberType.Integer)
                {
                    if (int.Parse(Text) > int.Parse(maxValue))
                    {
                        Text = maxValue;
                    }
                }
                else if (numberType == NumberType.Long)
                {
                    if (long.Parse(Text) > long.Parse(maxValue))
                    {
                        Text = maxValue;
                    }
                }
                else if (numberType == NumberType.Float)
                {
                    if (float.Parse(Text) > float.Parse(maxValue))
                    {
                        Text = maxValue;
                    }
                }
                else if (numberType == NumberType.Double)
                {
                    if (double.Parse(Text) > double.Parse(maxValue))
                    {
                        Text = maxValue;
                    }
                }
            }
            SelectionStart = Text.Length;
        }

        /// <summary>
        /// 复写Text,确保值是符合我们预设的类型
        /// </summary>
        public override string Text
        {
            get => base.Text;
            set
            {
                if (string.IsNullOrWhiteSpace(value))
                {
                    base.Text = value;
                }
                else
                {
                    if (numberType == NumberType.Integer)
                    {
                        if (int.TryParse(value, out var result))
                        {
                            base.Text = result.ToString();
                        }
                        else
                        {
                            base.Text = "";
                        }
                    }
                    if (numberType == NumberType.Long)
                    {
                        if (long.TryParse(value, out var result))
                        {
                            base.Text = result.ToString();
                        }
                        else
                        {
                            base.Text = "";
                        }
                    }
                    else if (numberType == NumberType.Float)
                    {
                        if (float.TryParse(value, out var result))
                        {
                            base.Text = result.ToString("F" + decimalPointNumber);
                        }
                        else
                        {
                            base.Text = "";
                        }
                    }
                    else if (numberType == NumberType.Double)
                    {
                        if (double.TryParse(value, out var result))
                        {
                            base.Text = result.ToString("F" + decimalPointNumber);
                        }
                        else
                        {
                            base.Text = "";
                        }
                    }
                }
            }
            }

            [Browsable(false)]
            [DefaultValue(0)]
            public int IntValue
        {
            get
            {
                if (string.IsNullOrWhiteSpace(Text) || numberType != NumberType.Integer)
                {
                    return 0;
                }
                VerifyThenFormatValue();
                return int.Parse(Text);
            }
            set
            {
                Text = value.ToString();
                VerifyThenFormatValue();
            }
        }

        [Browsable(false)]
        [DefaultValue(0)]
        public long LongValue
        {
            get
            {
                if (string.IsNullOrWhiteSpace(Text) || numberType != NumberType.Long)
                {
                    return 0;
                }
                VerifyThenFormatValue();
                return long.Parse(Text);
            }
            set
            {
                Text = value.ToString();
                VerifyThenFormatValue();
            }
        }

        [Browsable(false)]
        [DefaultValue(0)]
        public float FloatValue
        {
            get
            {
                if (string.IsNullOrWhiteSpace(Text) || numberType != NumberType.Float)
                {
                    return 0;
                }
                VerifyThenFormatValue();
                return float.Parse(Text);
            }
            set
            {
                Text = value.ToString();
                VerifyThenFormatValue();
            }
        }
        [Browsable(false)]
        [DefaultValue(0)]
        public double DoubleValue
        {
            get
            {
                if (string.IsNullOrWhiteSpace(Text) || numberType != NumberType.Double)
                {
                    return 0;
                }
                VerifyThenFormatValue();
                return double.Parse(Text);
            }
            set
            {
                Text = value.ToString();
                VerifyThenFormatValue();
            }
        }

    }

    public enum NumberType
    {
        Integer, Long, Float, Double
    }
}

2.然后在vs的工具箱中右键所有Windows窗体--》选择项--》选择浏览,然后把根据步骤1生成的dll添加进来--》接下来在工具箱就可以看到添加的numberTextBox控件了

3.编译好的dll也可以从这下载,省的自己编译了https://download.csdn.net/download/qq_42987967/89703930

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值