textbox只能输入数值,字母,汉字,小数,日期,身份验证

本文介绍了一个C#类,该类提供了多种方法来限制不同类型的文本框输入,包括仅限数字、字母、汉字、四位数字或小数、日期及合法身份证号等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Regular

    {

        /// <summary>

        /// 只能输入数值型

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void IsDigit(object sender, KeyPressEventArgs e)

        {

            if (e.KeyChar != 8 && e.KeyChar != 13 && (e.KeyChar > 57 || e.KeyChar < 48))

                e.Handled = true;

        }

        /// <summary>

        /// 只能输入字母

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void IsEnglish(object sender, KeyPressEventArgs e)

        { 

            if(!char.IsLetter(e.KeyChar)&&e.KeyChar!=8&&e.KeyChar!=13&&e.KeyChar !=32)

                e.Handled=true;

        }

        /// <summary>

        /// 只能输入汉字

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void IsChinese(object sender, KeyPressEventArgs e)

        {

            if ((e.KeyChar > 0 && e.KeyChar < 7) || (e.KeyChar > 9 && e.KeyChar < 177))

            {

                e.Handled = true;

                MessageBox.Show("只能输入汉字");

            }

 

        }

        /// <summary>

        /// 只能输入4位有效数字或小数

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void IsNumber(object sender, KeyPressEventArgs e)

        {

            if (e.KeyChar != 8 && e.KeyChar != 13 && !char.IsNumber(e.KeyChar)&&e.KeyChar!=46)

            {

                e.Handled = true;

            }

             else if (Char.IsPunctuation(e.KeyChar))

              {

                  if (e.KeyChar == '.')

                  {

                      if (((TextBox)sender).Text.LastIndexOf('.') != -1)

                      {

                          e.Handled = true;

                      }

                  }

                  else

                  {

                  e.Handled = true;

                  }

              }

              else if (e.KeyChar != 8 && e.KeyChar != 13)

              {

                  if (((TextBox)sender).Text.Length+1 > 4)

                  {

                      e.Handled = true;

                  }

              }

 

        }

        /// <summary>

        /// 只能输入日期

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void IsData(object sender, KeyPressEventArgs e)

        {

            if (e.KeyChar != 8 && e.KeyChar != 13 && !char.IsNumber(e.KeyChar))

            {

                e.Handled = true;

            }

            //DateTime.Parse(((TextBox)sender).Text.ToString ());

 

        }

        /// <summary>

        /// 输入合法的身份证

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        public void IsIdentityCards(object sender, KeyPressEventArgs e)

        {

            if (!char.IsLetterOrDigit(e.KeyChar) && e.KeyChar != 8 && e.KeyChar != 13)

            {

                e.Handled = true;

            }

            else if (((TextBox)sender).Text.Length < 17)

            {

                if (char.IsLetter(e.KeyChar) && e.KeyChar != 8 && e.KeyChar != 13)

                {

                    e.Handled = true;

                }

            }

            else if (((TextBox)sender).Text.Length == 18)

            {

                if ((e.KeyChar != 88 && e.KeyChar != 120) && !char.IsDigit(e.KeyChar) && e.KeyChar != 8 && e.KeyChar != 13)

                {

                    e.Handled = true;

                }

            }

            else if (e.KeyChar != 8 && e.KeyChar != 17)

            {

                if (((TextBox)sender).Text.Length > 17)

                    e.Handled = true;

            }

        }

 

    },汉字

<think>好的,我现在要解决用户在C# WinForms中限制TextBox只能输入带一位小数数值的问题。首先,我需要回想一下WinForms中处理输入验证的常见方法。通常,可以通过处理键盘事件(如KeyPress)或文本改变事件(如TextChanged)来实现输入限制。 用户提到要限制输入只能有一位小数,这意味着需要确保输入的内容符合数字格式,并且小数点后最多一位。首先,我应该考虑使用KeyPress事件来拦截不符合条件的字符输入。例如,当用户输入非数字字符时,阻止其显示在TextBox中。但还需要处理小数点的输入,允许输入一个小数点,并且之后只能输入一个数字。 接下来,我需要考虑用户可能的输入情况,比如: 1. 输入的第一个字符是否为数字或小数点? 2. 是否已经有小数点存在,不能再输入第二个? 3. 小数点后是否只能输入一个数字? 另外,还要处理粘贴的情况,这时候可能需要使用TextChanged事件来验证整个文本内容,而不仅仅是逐个字符的输入。 然后,我需要编写代码示例。首先,在KeyPress事件中检查输入的字符是否符合要求。例如,允许数字、退格键,以及小数点(但只能有一个)。同时,如果当前文本已经包含小数点,并且用户试图输入另一个小数点,或者在小数点后已经有一个数字的情况下继续输入,应该阻止这些操作。 另外,在TextChanged事件中,可能需要进一步验证整个文本是否有效,例如,如果用户通过粘贴输入了无效的内容,可以在这里进行修正或提示错误。 可能需要使用正则表达式来验证整个文本是否符合格式,比如^\d*\.?\d{0,1}$,即允许整数部分任意数字,小数部分最多一位。 还需要考虑用户可能输入类似“.5”的情况,即小数点前没有数字,这时候是否允许?根据常见需求,可能要求小数点前至少有一个数字,所以正则表达式可能需要调整为^\d+\.?\d{0,1}$,但这也取决于具体需求。 此外,处理用户输入时的即时反馈,比如当输入无效字符时,阻止其显示,或者在输入无效时显示错误提示。 可能还需要处理文本框中的现有内容,例如,当用户删除中间某个字符导致格式错误时,需要在TextChanged事件中纠正。 综上所述,步骤大致如下: 1. 在KeyPress事件中处理字符输入,允许数字、退格、删除,以及一个小数点。 2. 在TextChanged事件中使用正则表达式验证整个文本是否符合要求。 3. 对于无效输入,可以清空文本框或保留有效部分,并提示用户。 现在需要将这些思路转化为具体的代码示例,确保覆盖所有可能的情况,并且代码正确无误。</think>在C# WinForms中限制`TextBox`只能输入带一位小数数值,可以通过以下步骤实现: --- ### **方法1:使用`KeyPress`事件拦截非法输入** 1. **绑定事件**:在窗体设计器中双击`TextBox`的`KeyPress`事件,或在代码中手动绑定: ```csharp textBox1.KeyPress += TextBox1_KeyPress; ``` 2. **事件处理逻辑**: ```csharp private void TextBox1_KeyPress(object sender, KeyPressEventArgs e) { TextBox textBox = (TextBox)sender; bool isDecimalPoint = e.KeyChar == '.'; bool isDigit = char.IsDigit(e.KeyChar); bool isControlKey = char.IsControl(e.KeyChar); // 允许退格、删除等控制键 // 允许数字、控制键,或第一个小数点 if (!(isDigit || isControlKey || isDecimalPoint)) { e.Handled = true; // 阻止输入 return; } // 检查是否已存在小数点 if (isDecimalPoint && textBox.Text.Contains('.')) { e.Handled = true; return; } // 检查小数点后是否已有1位 if (textBox.Text.Contains('.')) { int decimalIndex = textBox.Text.IndexOf('.'); if (textBox.SelectionStart > decimalIndex && textBox.Text.Length - decimalIndex > 1) { e.Handled = true; } } } ``` --- ### **方法2:使用`TextChanged`事件验证格式** 1. **绑定事件**: ```csharp textBox1.TextChanged += TextBox1_TextChanged; ``` 2. **正则表达式验证**: ```csharp using System.Text.RegularExpressions; private void TextBox1_TextChanged(object sender, EventArgs e) { TextBox textBox = (TextBox)sender; string pattern = @"^\d*\.?\d{0,1}$"; // 允许整数、小数部分最多一位 if (!Regex.IsMatch(textBox.Text, pattern)) { // 删除最后一个无效字符 textBox.Text = textBox.Text.Substring(0, textBox.Text.Length - 1); textBox.SelectionStart = textBox.Text.Length; // 光标移至末尾 } } ``` --- ### **完整代码示例** ```csharp public partial class Form1 : Form { public Form1() { InitializeComponent(); textBox1.KeyPress += TextBox1_KeyPress; textBox1.TextChanged += TextBox1_TextChanged; } private void TextBox1_KeyPress(object sender, KeyPressEventArgs e) { // 方法1的代码 } private void TextBox1_TextChanged(object sender, EventArgs e) { // 方法2的代码 } } ``` --- ### **效果说明** - **输入限制**:用户只能输入数字和小数点,且小数点后最多一位(如`12.3`或`0.5`)。 - **错误处理**:输入非法字符(如字母)时自动拦截,粘贴无效内容时会自动修正[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值