admin 管理员组文章数量: 887021
2024年1月18日发(作者:html讲解)
C#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) // 屏蔽非数字键{ ress(e); if (ly) // 只读, 不处理 { return; } if ((int)r ) { return; } }
if (selStart == 0 || selStart > ) // 不需要删除
{ return; } if (selStart == 1 ionStart = 0; } else
// selStart > 0 { = ing(0, selStart - 1)
+ ing(selStart, - selStart);
ionStart = selStart - 1; }}
5、结语
本文探讨的是TextBox控件输入的事前处理模式,即在输入字符的同时屏蔽非数字键。在实际应用中一般实行事后处理模式,即在TextBox控件的Exit、Validate等大事中进展输入后处理——离开该控时进展验证。但事后处理模式有如下缺乏:
与数据源绑定时输入非数字字符可能抛出特别,需要考虑特别捕获
需要推断数据并给出错误提示等处理
上述内容是从笔者的开源数值型数据编辑控件TNumEditBox中修改删减而来的,该控件考虑的状况比只允许数字输入要简单得多,感兴趣者可以参考并指正。需要指出,TNumEditBox的核心思路来自免费的Delphi控件PBNumEdit和开源的C#控件BANumEdit。作为回报,笔者也将TNumEditBox开源并公布到CodeProject。
这里探讨的是屏蔽非数字键输入,明显可以推广到屏蔽其它特别键如Tab和指定字母等。
版权声明:本文标题:C#TextBox中只允许输入数字的解决方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705583195h491020.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论