C#旨在设计成为一种「简单、现代、通用」,以及面向对象的程序设计语言。其中c# textbox数字输入需要注意的一些情况容易被忽略,针对这一情况,笔者将在这篇文章中分享自己的一些经验。
最近看到一些关于c# textbox数字中限制只允许输入数字的博文,这类问题常常用事后处理模式:录入字符结束后在控件离开(如Exit事件)或确认时进行判断。本文探讨控件录入操作的事前处理模式:做录入操作时屏蔽非数字字符。下面,结合笔者前段时间修改完善的开源数值文框TNumEditBox控件,介绍一个基于定制c# textbox数字控件的解决方法。
在定制的c# textbox数字控件中,如果只允许输入数字,需要考虑如下三种情况:
正常按键输入的字符,包括西文、中文字符等
通过键盘快捷键方式贴入的文本,即Ctrl+V操作
通过上下文关联菜单的Mouse操作贴入的文本,即”粘贴“操作
在探讨的同类文章中,多数只考虑了第1种情况,忽略得了第2、3种常见的操作。本文探讨的处理方法核心思路是重写事件OnKeyPress()和两个方法 ProcessCmdKey()与WndProc(),并把Ctrl+V、关联菜单的Paste操作统一到键盘录入操作中,从而在 OnKeyPress()屏蔽掉非数字键。
1、重写键盘事件OnKeyPress()
键盘输入的字符可以通过重写c# textbox数字控件的OnKeyPress()事件处理,见如下代码:
- protected override void OnKeyPress(KeyPressEventArgs e) // 屏蔽非数字键