【问题标题】:Only allowing up to three digit numeric characters in a text box在文本框中只允许最多三位数字字符
【发布时间】:2013-01-22 10:00:32
【问题描述】:

有没有办法只允许用户在文本框中输入最大数量的字符?我希望用户输入一个标记/等级,并且只能输入 0 - 100。下面我有监控击键并且只允许输入数字的代码,但我想找到一种只允许用户输入的方法输入一个最小值为0,最大值为100的数字。

private void TxtMark4_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar < '0' || e.KeyChar > '9' || e.KeyChar == ' ')
    {
        e.Handled = true;
    }
    else
    {
        e.Handled = false;
    }
}

或者我可以使用以下内容:

if (e.KeyChar >= 48 && e.KeyChar <= 57 || e.KeyChar == ' ')
{
    e.Handled = false;
}
else
{
    MessageBox.Show("You Can Only Enter A Number!");
    e.Handled = true;
}

但我想找到一种最多只允许输入三个字符的方法。

【问题讨论】:

  • WinForms? WPF? ASP.NET?
  • 银光? Windows 手机?

标签: c# textbox character numeric keystroke


【解决方案1】:

我认为它很简单:

textBox1.MaxLength = 3;

然后你处理 Leave 事件的最大值:

    private void textBox1_Leave(object sender, EventArgs e)
    {
        string s = (sender as TextBox).Text;
        int i = Convert.ToInt16(s);

        if (i > 100)
        {
            MessageBox.Show("Number greater than 100");
            (sender as TextBox).Focus();
        }
    }

您还可以使用 System.Windows.Forms.NumericUpDown 来轻松设置最小值和最大值。

【讨论】:

  • 是的!那行得通,但是这三个字符可能是 0 - 999 而我想将它限制在 0 - 100
  • @densgirl4 现在您知道为什么要在输入数字时使用 NumericUpDown 而不是文本框了。
  • 是的,我愿意!我是一名学生,对 C# 的高级水平几乎一无所知。在我发布这个问题之前,我什至不知道存在像 NumericUpDown 这样的控件。我还有很多东西要学。
【解决方案2】:

如果解析失败,此版本将 textBox1.Text 设置为空字符串

private void textBox1_TextChanged(object sender, EventArgs e) {
    int i;

    textBox1.Text=
        false==int.TryParse(textBox1.Text, out i)||0>i||i>100
            ?""
            :i.ToString();
}

如果你想保留部分成功解析的数字,那么

String previousText="";

private void textBox1_TextChanged(object sender, EventArgs e) {
    var currentText=textBox1.Text;
    int i;

    textBox1.Text=
        int.TryParse(currentText, out i)
            ?0>i||i>99
                ?previousText
                :i.ToString()
            :""==currentText?currentText:previousText;

    previousText=textBox1.Text;
}

【讨论】:

    【解决方案3】:

    我会用 catch 来处理每个可能的用户错误。

    我假设您的文本框名为 TxtMark4。在执行 TryParse 的 if-test 中编写 txtMark4.Content() 或您需要读取框架中文本框内容的任何内容

    private void TxtMark4_KeyPress(object sender, KeyPressEventArgs e)
    {
        int? tmp = null; //signed to allow it to be assigned the value of null
        if(int.TryParse(txtMark4.Text,out tmp)){
            if(tmp >=0 && tmp <= 100){
            //Here the number is between 0 and 100
            }
            else{//Number is below 0 or above 100
                if(tmp > 100){
                    TxtMark4.Text = TxtMark4.Text.remove(2); //This will forcefully make it less or equal to 100
                    DisplayLabel.text = "Numbers between 0-100 only";
                }
                else{
                    TxtMark4.Text = ""; //and if its below 0 it will not be displayed
                    DisplayLabel.text = "Numbers between 0-100 only";
                }
            }
        }
        else{//Not a number
            //Return some indicator to the user
            DisplayLabel.text = "numbers only";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2010-10-24
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多