Winform关于文本框(textbox)清空和限制输入【灰色显示】

目录

前言

实践

 清空文本框

限制文本框的输入

设置文本框中无内容是显示灰色提示:

限制下拉框的显示条数

设置datagridview某一行显示格式为“*”


前言

        最近一直在优化TextBox,这个控件用的很普遍,用法也特别的多,最近用的最多的是一个清空,还有就是限制文本框的输入字符。【此处清空加一个Combox控件,在运用这个控件的时候,如果下拉框添加了过多的内容的话,那就可能显示出来的十好几条,导致整个窗体可能都是这个下拉框,这样就会很难看,此时就需要对下拉框显示个数进行一下设置,保证美观。】

实践

  •  清空文本框

        任何难题的的敌人都是实践,花时间去实践,任何问题都是so easy的。清空文本框我们可能就就是运用一下的代码

public void Btnclear_Click(object sender,EventArgs e)
{
   txtcard.text="";  txtuserid.text=""
   cb.age.text="";
} 

        以上方法对于少数的,一个窗体中如果有一两个或者三四个的文本框是=时比较方便,但是如果一个窗体上有十几个文本框需要清空的话,这样就很麻烦了,还很有可能会漏掉几个没有清空,多次调试,浪费时间。那么有没有想过有一种方法可以同时清除呢?接下来给你提供代码了【运用foreach方法,遍历整个窗体或者某个文本框中的文本框或者下拉框控件,进行删除就真的so easy了,绝对不会落下某一个控件,相信计算机的搜索能力】:

private void BtnClean_Click(object sender, EventArgs e)
        {
            //清空窗体文本框
            foreach (Control control in this.Controls)
            {
                if (control is TextBox || control is ComboBox)
                {
                    control.Text = "";
                }
            }
            //清空容器内文本框
            foreach (Control control in gb1.Controls)
            {
                if (control is TextBox ||control is ComboBox)
                {
                    control.Text = "";
                }
            }
        }
  • 限制文本框的输入

       1.  这种问题无论是在VB还是C#还是以后的语言中,限制字符的输入是必不可少的,非常简单的一个方法就是:建一个限制的类,比如Impose类,里面有限制只能输入数字的方法,只能输入汉字和字母的方法、只能输入字母和数字的方法,窗体中需要的时候,直接调用法即可:Impose.setNumber(e);

using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace UI
{
    public partial class Impose
    {

        /// <summary>
        /// 限制只可输入数字
        /// </summary>
        /// <param name="e"></param>
        public static void setNumber(KeyPressEventArgs e)
        {
            //IsDigit 判断的是十进制数字,就是 '0 '..'9 '。 
            if (e.KeyChar != '\b' && !Char.IsDigit(e.KeyChar))//\b是退格键
            {
                e.Handled = true;
                MessageBox.Show("请输入数字", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }

        /// <summary>
        /// 限制只能输入汉字或字母
        /// </summary>
        /// <param name="c"></param>
        public static void setChinese(KeyPressEventArgs e)
        {
            Regex rg = new Regex(@"^[\u4e00-\u9fa5a-zA-Z\b]+$");
            if (!rg.IsMatch(e.KeyChar.ToString()))
            {
                e.Handled = true;
                MessageBox.Show("只能输入汉字或字母!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }

        /// <summary>
        /// 只能输入字母或数字
        /// </summary>
        /// <param name="e"></param>
        public static void setEnglishOrNum(KeyPressEventArgs e)
        {
            if ((e.KeyChar >= 'a' && e.KeyChar <= 'z') || (e.KeyChar >= 'A' && e.KeyChar <= 'Z')
   || (e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar == 8))
            {
                e.Handled = false;

            }
            else
            {
                e.Handled = true;
                MessageBox.Show("密码只能是字母或者数字!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }
    }
}

        2.今天对邮箱的设置时候,遇到一个问题,那就是如何不能输入汉字,可以只限制汉字,这种方法和上面限制一样,但是可以运用其他的方法,那就是如果输入汉字,怎样才能转换为英文 ,于是开始进行探索。记得看过一个视频,上面有过讲解,进行一次复习,然后出现了一下的代码。

【注:此种方法需要安装一个类库【类库地址】,安装第一个,然后引用以下第二章图片两个,】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
using Microsoft.International.Converters.PinYinConverter;
namespace UI
{
    public partial class GetPinyin
    {
        public static string Pinyin(string s1)
        {
            string s2 = "";

            foreach (char c in s1)
            {
                ChineseChar cc = new ChineseChar(c);
                //s2 += cc.Pinyins[0]  显示拼音和声调
               // s2 += cc.Pinyins[0][0]  显示拼音首字母
               //显示拼音,此时是小写【如果没有ToLower则是大写】
                s2 += cc.Pinyins[0].Substring(0,cc.Pinyins[0].Length-1).ToLower();
            }
            return s2;
        }
    }
}

         此种用法有点限制,那就是只能判断第一个输入汉字,然后转为拼音,然后下一个调用的时候会调用转换的字母,进而会出错。【如果你用的话没有错,希望可以指导一下】。

       3.第三种方法是我感觉比较常见的一种方式,那就是设置文本框获取焦点的时候,属性修改为只输入英文【除非修改】,不能输入汉字, 此时涉及到TextBox文本框中的一个新的属性:textBox.ImeMode;查完此属性才知道功能如此强大,我们在点击输入密码的时候,会直接显示输入英文,其实就是对此属性的设置。       

                                                     图片引用连接

使用此属性尽量和文本框的Click事件结合使用,点击文本框时更改属性:

  • 设置文本框中无内容是显示灰色提示:

        此想法来自于师傅的意见,在进行重构一遍验收的时候,在输入卡号的时候如果没有输入数字的话就会提示输入数字,输错一次提示一次,这样可能会给用户带来烦躁感,于是就提出可以限制文本框的输入长度,在文本框内显示灰色的文本提示输入数字,这样的话那么只要是认识字的那就应该不会去输入其他的东西了。

       这种方式主要用到了两个新的事件方法:Enter和Leave事件。

        Enter:当控件是窗体的活动控件时发生

        Leave:当控件不再是窗体的活动控件时发生

        private void txtRecharge_Enter(object sender, EventArgs e)
        {
            if (txtRecharge.Text == "[请输入充值金额]")
            {
                txtRecharge.Text = "";
            }
        }
        private void txtRecharge_Leave(object sender, EventArgs e)
        {
            if (txtRecharge.Text == "")
            {
                txtRecharge.Text = "[请输入充值金额]";
             //文本框内字体的颜色(灰色)
                txtRecharge.ForeColor = Color.Gray;
            }
        }

运行结果:

  • 限制下拉框的显示条数

      此设置只需要更改一个属性即可完成:MaxDropDownItems 想要显示几条就改为几条就可以了

设置datagridview某一行显示格式为“*”

  //查询用户使密码列显示为“*“号
  private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
   {
       if (e.ColumnIndex == 1)
       {
           if (e.Value != null && e.Value.ToString().Length > 0)
           {
             e.Value = new string('*', e.Value.ToString().Length);
           }
       }
    }

          遇到问题就去查,花时间攻克,收获就会很多。

发布了114 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/103157133