• 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;
    }
  • 相关阅读:
    java中的Iterator和Iterable 区别
    Ubuntu 12.04 部署 PostGIS 2.1
    postgres模板数据库
    在ubuntu 10.04 上QGIS的安装步骤
    js----解决异步之Generator && async
    js----promise.all() promise.race()
    js----异步之Promise,Generator,Async
    js----CSRF-跨站请求伪造攻击
    js----js实现继承的方式及其优缺点
    vue----nextTick获取最新dom结构
  • 原文地址:https://www.cnblogs.com/haley24/p/11973578.html
Copyright © 2020-2023  润新知