控制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的情况),如果需要控制输入纯数字,请在第二、三部分加入相应代码
我向大家推荐一种继承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的情况),如果需要控制输入纯数字,请在第二、三部分加入相应代码
相关文章推荐
- jquery控制textbox只能输入数字的方法
- 实现textBox只能输入数字的一种方法!
- 一种两位小数点数字输入的控制方法
- C#中winform控制textbox输入只能为数字的方法
- 有关TextBox中输入字符控制的一种解决办法
- 一种全数字控制方式高压变频控制器的组成方法
- 有关TextBox中输入字符控制的一种解决办法
- js控制文本框只输入数字和小数点的方法
- C#控制textbox中的输入数字固定显示2位小数
- 控制TextBox控件只输入数字的解决办法
- 在网页里让文本框只能输入数字的一种方法。外加回车换Tab
- C# 控制 TextBox 输入时若是英文自动转大写或转小写的方法
- C#TextBox中只允许输入数字的解决方法
- Winform TextBox中只能输入数字的几种常用方法(C#)
- 控制输入的数据为数字或中文的方法
- js控制文本框只输入数字和小数点的方法
- C# TextBox中只能输入数字的几种常用方法(C#)
- 写一个方法完成如下功能,判断从文本框textbox1输入的一个字符,如果是数字则求该数字的阶乘,如果是小写字条,则转换为大写,大写字符不变,结果在文本框textbox2中显示
- TextBox中只能输入数字的几种常用方法(C#)
- Winform 程式 TextBox 控制超出最大长度(英文与汉字)不可输入 解决方法