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和指定字母等。


本文标签: 输入 控件 处理