控制TextBox数字输入的一种方法(转)

本文介绍了一种通过继承TextBox控件来限制用户只能输入数字字符的方法,包括构造方法、ProcessCmdKey和OnKeyPress三个关键部分,旨在简化数字输入验证过程。

经常有这样的需求,部分输入框(如电话号码等),只允许输入数字字符。大家怎样解决呢?有人说用正则表达式处理验证事件。我觉得这样晚了一点,而且很难控制全面。

我向大家推荐一种继承TextBox的做法。

public class DPTextBox : TextBox
{
    public DPTextBox() : base()
    {
        base.ImeMode = ImeMode.Disable; 
    }

 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
        if (keyData == (Keys.Control | Keys.V)) 
        { 
            try 
            { 
                string s = Clipboard.GetText(); 
                foreach (char c in s)

                {

                    if (char.IsLetter(c)) return true;

                } 
            } 
            catch 
            { 
                return true; 
            } 
        } 
        return base.ProcessCmdKey(ref msg, keyData); 
    }

 

    protected override void OnKeyPress(KeyPressEventArgs e) 
    { 
        if (char.IsLetter(e.KeyChar)) 
        { 
            e.Handled = true; 
        } 
        base.OnKeyPress(e); 
    }
}

 

这种做法分为三部分,

第一部分:构造方法里面base.ImeMode = ImeMode.Disable; 是避免用户输入全角字符;

第二部分:覆盖ProcessCmdKey,是为了防止通过剪贴板{Ctrl+V}带入非数字字符,如果剪贴板字符串数据带有字母,操作将取消。

第三部分:覆盖OnKeyPress,是为了用户输入字符数字是跳过处理Press的。

处理这一需求的方法还有多种(例如,在第二部分处理所有的判断,不用第三部分,但我认为那样写的逻辑相对比较复杂),出于代码应该是尽量简单的原则,就分开了三部分。注意,这段代码并没有处理标点符号,因为只是考虑输入的是非字符(例如电话,就会有(+86)20-88888888的情况),如果需要控制输入纯数字,请在第二、三部分加入相应代码

转载于:https://www.cnblogs.com/junbird-nest/archive/2012/06/18/2553644.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值