开发者社区> 潇湘隐者> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

WinForm系列——控件的输入限制

简介:
+关注继续查看

在.NET WinForm开发中,我们时常需要控制一些控件的输入。比如某个TextBox用来输入产品的数量,只能输入数字;某个ComboBox表示支付方式: 现金(M)、信用卡(C)、支票(P)等。用鼠标选择支付方式当然没有问题。但是有时候用户可能是手动输入,那么我们不希望用户手动输入时,输入非法的字 母。所以必须控制用户只输入这三个字母,而且必须是大写的。那么下面就Textbox和ComboBox这两个控件做例子来聊聊如何限制控件输入。姑且抛 砖引玉,希望大家有更好的方法。


Textbox只能输入数字。当输入是26个字符或是中文时,不显示输入。代码如下: 

代码

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        private void txbMoney_KeyPress(object sender, KeyPressEventArgs e)
        {
            //如果输入法是全角输入数字
            if (System.Text.Encoding.Default.GetBytes(e.KeyChar.ToString()).Length == 2)
            {
                e.Handled = true;
                return;
            }

            if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar) || e.KeyChar == '.')
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

 

其实这样控制后,控件对全角输入,或是非数字输入等都能有效的控制,但是我测试的时候发现还是有个问题控制不了:如果我输入2.12.12这样的字 符串(非数字),它会视为合法的。结论:还是需要结合正则表达式或是判断是否数字的代码,一起来控制。否则像12.12.12这样的字符串也会视为数字, 引起异常。也就是说这中方法运用只是提高用户体验,或是作为一种辅助手段


Textbox只输入字符(英文字符),输入其它数字、中文等时不显示输入。代码如下:

代码

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        private void txbString_KeyPress(object sender, KeyPressEventArgs e)
        {
            //错误,对中文、全角状态下英文、控制字符没有处理
            //if (!Char.IsLetter(e.KeyChar))
            //{
            //    e.Handled = true;
            //}

            if (System.Text.Encoding.Default.GetBytes(e.KeyChar.ToString()).Length == 2)
            {
                e.Handled = true;
                return;
            }

            if (Char.IsLetter(e.KeyChar) || Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

 

Combobox绑定到List<PayTerm> list数据源上,其中PayTerm是实体类。它的数据只有M、C、P三个值,当用户手动输入时,只能输入控件数据源包含的P,C,M字符,而且输入小写c、m、p时应该转化为大写

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->        private void cmbPayTerm_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar))
            {
                for (int index = 0; index < cmbpayterm.items.count; index++)
                {
                    if ((cmbpayterm.items[index] as payterm).paytype == char.toupper(e.keychar).tostring())
                    {
                        cmbpayterm.text = char.toupper(e.keychar).tostring();
                        e.handled = true;
                    }
                }
                e.handled = true;      
            }
            else
            {
                cmbPayTerm.Text = "";
                //如果未处理事件,则会将它发送到操作系统进行默认处理。将 Handled 设置为 true,以取消 KeyPress 事件。
                e.Handled = true;

            }
        }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java面试题:Spring支持的ORM?
java面试题:Spring支持的ORM?
50 0
C++输入输出文件流
C++输入输出文件流
33 0
Web渲染的权衡
构建网站的方法有很多,但是每种构建都离不开渲染,那如何从性能的角度来权衡Web上的渲染呢?
22 0
TF:利用TF的train.Saver将训练好的W、b模型文件保存+新建载入刚训练好模型(用于以后预测新的数据)
TF:利用TF的train.Saver将训练好的W、b模型文件保存+新建载入刚训练好模型(用于以后预测新的数据)
48 0
WEBGL学习【八】模型视图投影矩阵
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/78473425 ...
969 0
Linux设备模型(9)_device resource management ---devm申请空间【转】
转自:http://www.wowotech.net/linux_kenrel/device_resource_management.html   1. 前言 蜗蜗建议,每一个Linux驱动工程师,都能瞄一眼本文。
875 0
+关注
潇湘隐者
网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业
777
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载