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


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


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

    代码
            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只输入字符(英文字符),输入其它数字、中文等时不显示输入。代码如下:

    代码
            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时应该转化为大写

            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;

                }
            }
    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    python库安装
    Reversing Linked List(根据输入序列对其做部分或全部反转)
    简单的一元二项(使用的是指针形式,方便调试)
    最大子序列问题
    centos6安装mysql5.5.53
    android中常用的drawable
    android四大组件之ContentProvider
    android使用shape来绘制控件
    android布局理解
    android命令行管理avd以及sqlite3命令
  • 原文地址:https://www.cnblogs.com/kerrycode/p/1681751.html
Copyright © 2020-2023  润新知