您的位置:首页 > 其它

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

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

我向大家推荐一种继承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的情况),如果需要控制输入纯数字,请在第二、三部分加入相应代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: