WinForm中如何让Textbox只能输入一定范围的数字呢?

本文介绍如何在Winform中创建自定义数字控件,模仿NumericUpDown控件的功能,包括设置最大值、最小值和当前值,以及实现输入限制和范围检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Winform中有一个自带的数字控件NumericUpDown,现在我想模仿它做个自定义的用户控件该怎么做呢?

首先,它有三个关键的属性Maximum(最大值),Minimum(最小值),Value(当前值),我们要把这三个属性加到自定义控件中。

然后,他还有两个加减按钮事件和输入框的改变事件,另外我还发现一个隐藏的功能,就是用户输入的值只能介于最大值与最小值中间我的做法是在输入框的KeyPress事件中记录上一次输入的值(PreValue),在TextChanged事件中判断改变后的值是否在最大值与最小值中间,如果不是则将PreValue赋值给输入框。

关键代码如下:

        #region 让输入的值在指定范围内

        /// <summary>
        /// 上一次输入框的值
        /// </summary>
        private string PreValue;

        /*
         在输入框输入一个值都顺序是:KeyPress => TextChanged
          */

        /// <summary>
        /// 键盘按下并弹起之后
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dSkinTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar != '\b')//这是允许输入退格键  
            {
                if ((e.KeyChar < '0') || (e.KeyChar > '9'))//这是允许输入0-9数字  
                {
                    e.Handled = true;
                    return;
                }
            }
            PreValue = dSkinTextBox1.Text;
        }
        
        /// <summary>
        /// 输入框的值发生改变后
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dSkinTextBox1_TextChanged(object sender, EventArgs e)
        {
            if (Valid(this.MyValue) == false)
            {
                //如果改变后都值不符合验证条件,则回到上一步
                this.dSkinTextBox1.Text = PreValue;
            }
        }

        #endregion

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值