[还是允许孩子有点情绪吧]今天是一个艳阳天,出奇地暖。晨起女儿的句话却让我如落冰窖, 妈妈,我今天不想上学,我要休息一天。 还好,我的神经已经被锻炼得非常结实,没有当场跳起来。磨蹭到七点二十分出门,女儿...+阅读
最近看到一些关于TextBox中限制只允许输入数字的博文,这类问题常常用事后处理模式:录入字符结束后在控件离开(如Exit事件)或确认时进行判断。本文探讨控件录入操作的事前处理模式:做录入操作时屏蔽非数字字符。下面,结合笔者前段时间修改完善的开源数值文框TNumEditBox控件,介绍一个基于定制TextBox控件的解决方法。
在定制的TextBox控件中,如果只允许输入数字,需要考虑如下三种情况:
正常按键输入的字符,包括西文、中文字符等
通过键盘快捷键方式贴入的文本,即Ctrl+V操作
通过上下文关联菜单的Mouse操作贴入的文本,即”粘贴“操作
在探讨的同类文章中,多数只考虑了第1种情况,忽略得了第
2、3种常见的操作。本文探讨的处理方法核心思路是重写事件OnKeyPress()和两个方法 ProcessCmdKey()与WndProc(),并把Ctrl+V、关联菜单的Paste操作统一到键盘录入操作中,从而在 OnKeyPress()屏蔽掉非数字键。
1、重写键盘事件OnKeyPress()
键盘输入的字符可以通过重写TextBox控件的OnKeyPress()事件处理,见如下代码:
protected override void OnKeyPress(KeyPressEventArgs e) 屏蔽非数字键{ base.OnKeyPress(e); if (this.ReadOnly) 只读, 不处理 { return; } if ((int)e.KeyChar base.Text.Length) 不需要删除 { return; } if (selStart == 1 base.SelectionStart = 0; } else selStart >0 { base.Text = base.Text.Substring(0, selStart - 1) + base.Text.Substring(selStart, base.Text.Length - selStart); base.SelectionStart = selStart - 1; }}
5、结语
本文探讨的是TextBox控件输入的事前处理模式,即在输入字符的同时屏蔽非数字键。在实际应用中一般采取事后处理模式,即在TextBox控件的Exit、Validate等事件中进行输入后处理——离开该控时进行验证。但事后处理模式有如下不足:
与数据源绑定时输入非数字字符可能抛出异常,需要考虑异常捕获
需要判断数据并给出错误提示等处理
上述内容是从笔者的开源数值型数据编辑控件TNumEditBox中修改删减而来的,该控件考虑的情况比只允许数字输入要复杂得多,感兴趣者可以参考并指正。需要指出,TNumEditBox的核心思路来自免费的Delphi控件PBNumEdit和开源的C#控件BANumEdit。作为回报,笔者也将TNumEditBox开源并发布到CodeProject。
这里探讨的是屏蔽非数字键输入,显然可以推广到屏蔽其它特殊键如Tab和指定字母等。
以下为关联文档:
您允许孩子“虚度光阴”吗在现代社会,孩子们的日常生活被安排得满满当当,已经是大人们习以为常的事,甚至一天不安排自己孩子的活动,眼看自己的孩子 虚度光阴 ,父母们简直会受不了。但孩子们真的需要那么多...
请允许你的孩子画蓝苹果!蓝苹果和愤怒的爸爸暑假,送孩子去学画画。有一天,老师教他们画苹果树。我家孩子把苹果画成了一串一串儿的,像葡萄一样。我问他为什么这样画,他说,他希望果农都能收获更多果实。...
在WPS演示中如何输入形状2在该界面内找到插入选项,如图所示:3点击插入选项,在其编辑工具区里找到形状选项,如图所示:4点击形状选项,在其子级菜单里找到星与旗帜选项,如图所示:5在星与旗帜选项里找到五角...
家长为什么要允许孩子哭前两天带米粒去超市,我们正在挑苹果,旁边一对娘俩呛呛起来。起因很简单,小姑娘(大概3岁多)想吃葡萄,妈妈说前天刚吃过,不买了。女儿开始闹情绪,妈妈哄了几句不耐烦,直接开嚷:你这孩...
亲爱的孩子,我允许你不优秀,但不允许你没教养!一个孩子的教养是成功的基本因素,而教养是从小就要开始培养的,是父母的家庭教育方式影响的。因此,在孩子成长的每一步,都需要关注孩子的教养问题。当你带着孩子出门,给孩子带上小...
允许孩子犯错误——儿童自信心自尊心保护允许儿童在做事中犯错误, 儿童犯错误,上帝也原谅 ,是成人必须坚守的基本原则,因为犯错是学习的一部分。成人甚至有必要向儿童明显表达自己的态度:犯错误是不可避免的,所有大人和...
英国妈妈们为何能允许孩子玩得这么脏行文至此,爱清洁的妈妈们该看我不顺眼了——别折腾老娘啦!从宝宝出生起,换不完的尿布,擦不完的呕奶和口水,洗不完的餐具奶瓶衣服毛巾,还要一遍遍消毒以防感冒拉肚子,还嫌不够忙不够...
请允许你的孩子画蓝苹果,要知道想象力对孩子的重要性!富兰克林曾经陷入想象:“如果在雷雨天放风筝,会发生什么?” 这时候如果有人告诉他:“傻啊?不要命了么?”也许就不会存在避雷针。哥白尼也曾陷入想象:“如果地球不是宇宙的中心,那...
输入缓冲区清除方法通常大家会用sync()函数来清除输入缓冲区的内容。个人感觉还是用ignore更好。 先简单说下sync(),sync()的作用就是清除输入缓冲区。成功时返回0,失败时badbit会置位,函数返回-1...