C#项目要求控制TextBox的输入只能为数字,但是又要保证系统常规操作可用,如Ctrl+A,Ctrl+C,Ctrl+V,Ctrl+X,Back,Delete等。这时候单纯使用KeyPress事件是不够的,要结合KeyDown事件一起来实现上述效果才可以。
private bool nonNumberEntered = false; private void telTextBoxX_KeyDown(object sender, KeyEventArgs e) { nonNumberEntered = false; //组合键 if (e.KeyData == (Keys.C | Keys.Control) || e.KeyData == (Keys.A | Keys.Control) || e.KeyData == (Keys.V | Keys.Control) || e.KeyData == (Keys.X | Keys.Control)) return; //数字 if (!e.Shift && e.KeyValue >= '0' && e.KeyValue <= '9') return; //星号、井号 if (e.KeyData == (Keys.D3 | Keys.Shift) || e.KeyData == (Keys.D8 | Keys.Shift)) return; //操作键 if (e.KeyData == Keys.Back || e.KeyData == Keys.Delete || e.KeyData == Keys.Left || e.KeyData == Keys.Right) return;
nonNumberEntered = true; }
private void telTextBoxX_KeyPress(object sender, KeyPressEventArgs e) {
if (nonNumberEntered) e.Handled = true; }
基本可以达到要求了,不过有个遗憾,就是直接通过剪切板粘贴过来的内容没有得到有效的拦截和控制。
关键词:事件 组合键 键盘 拦截 输入 KeyPress KeyDown
|