• Winform中控制文本框输入的值(只显示允许输入类型的值)


      在工作中,文本框TextBox控件是普遍使用的一个输入/显示的控件,很多时候我们作为开发者,根据业务的要求,并不想让客户在文本框中输入一些奇怪的东西,毕竟某些情况下,输入完成之后再进行文本校验是比较复杂且实现费事的一件事,所以就需要对输入的值直接进行校验,只允许输入符合要求的值,不符合要求的值,即使按下了键,也不在文本框中显示。

      首先,建一个winform窗体,放置一个TextBox控件。

      接下来为TextBox添加事件,主要是通过KeyDown和KeyPress来实现,KeyDown在KeyPress之前执行。

      Designer.cs中代码

    this.testTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(testTextBox_KeyDown);
    this.testTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(testTextBox_KeyPress);
    this.testTextBox.TextChanged += new System.EventHandler(testTextBox_TextChanged);

      窗体的cs中代码,该例子中只允许输入数字0-9,允许进行ctrl+A全选,ctrl+C复制,ctrl+X剪切,ctrl+V粘贴,并且会对粘贴的内容进行校验,如何全部是数字才会粘贴成功,并且可以删除backspace和回车enter

    //指示输入的值是否符合要求
    private bool _isInputOk;
    //指示文本框是否发生了TextChanged事件
    private bool _isTextChanged;

      KeyDown函数

    private void testTextBox_KeyDown(object sender, KeyEventArgs e)
    {
        _isInputOk = true;
        //ctrl + A , ctrl + C , ctrl + X
        if (e.KeyData == (Keys.A | Keys.Control) ||
            e.KeyData == (Keys.C | Keys.Control) ||
            e.KeyData == (Keys.X | Keys.Control))
        {
            return;
        }
        //ctrl + V
        if (e.KeyData == (Keys.V | Keys.Control))
        {
             //剪贴板中是否有数据
            if (Clipboard.ContainsText())
            {
                if (Regex.IsMatch(Clipboard.GetText(), @"^d+$"))
                {
                    return;
                }
                else
                {
                    _isInputOk = false;
                }
            }
        }
        //输入键盘上的数字0-9(包括小键盘)
        if ((!e.Shift && e.KeyValue >= (char)Keys.D0 && e.KeyValue <= (char)Keys.D9) ||
            (!e.Shift && e.KeyValue >= (char)Keys.NumPad0 && e.KeyValue <= (char)Keys.NumPad9))
        {
            return;
        }
        //Backspace
        if (e.KeyData == Keys.Back)
        { 
    return; } //Enter if (e.KeyData == Keys.Enter) { return; } _isInputOk = false;
    }

      KeyPress函数

    //后触发
    private void testTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!_isInputOk)
        {
            e.Handled = true;
            return;
        }
        //在文本框中点击了Enter按钮
        if (e.KeyChar == (char)Keys.Enter && _isTextChanged)
        {
            //todo 所需要的业务
        }
    
        _isTextChanged = false;
    }
  • 相关阅读:
    Hexo博客系列(二)-在多台机器上利用Hexo发布博客
    Hexo博客系列(一)-Windows系统配置Hexo v3.x个人博客环境
    [原创]VMware Workstation 14.1.3 Pro安装CentOS_7.6.1810
    [原创]前后端交互的方式整理
    [转载]白素贞的身世之谜
    [原创]存储过程里面的递归
    [原创]SpringBoot上传图片踩的坑
    [原创]markdown语法学习(commonmark)
    使用IntelliJ IDEA 前最好修改的配置
    软件开发资源下载
  • 原文地址:https://www.cnblogs.com/haley24/p/11973578.html
Copyright © 2020-2023  润新知