Разрешено использование только трехзначных цифровых символов в текстовом поле.

Есть ли способ разрешить пользователю вводить максимальное количество символов в текстовое поле? Я хочу, чтобы пользователь вводил оценку/оценку и мог вводить только от 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;
}

Но я хотел бы найти способ разрешить ввод максимум трех символов.


person densgirl4    schedule 07.02.2013    source источник
comment
WinForms? ВПФ? Асп.Нет?   -  person Ken White    schedule 07.02.2013
comment
Сильверлайт? Windows Phone?   -  person Carson63000    schedule 07.02.2013


Ответы (3)


Я думаю, что это так же просто, как:

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();
        }
    }

or

Вы также можете использовать System.Windows.Forms.NumericUpDown, где вы можете легко установить минимум и максимум.

person Cesar Vega    schedule 07.02.2013
comment
ДА! Это работает, но тогда три символа могут быть от 0 до 999, тогда как я хочу ограничить их диапазоном от 0 до 100. - person densgirl4; 07.02.2013
comment
@densgirl4, и теперь вы знаете, почему вы должны использовать NumericUpDown вместо текстового поля, когда хотите ввести число. - person Scott Chamberlain; 07.02.2013
comment
Да! Я студент и почти ничего не знаю на продвинутом уровне в отношении С#. Даже не знал, что существует такой элемент управления, как NumericUpDown, пока я не опубликовал этот вопрос. Мне еще многому предстоит научиться. - person densgirl4; 13.02.2013

Эта версия устанавливает 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;
}
person Ken Kin    schedule 07.02.2013

Я бы сделал это так, чтобы поймать каждую возможную ошибку пользователя.

Я предполагаю, что ваше текстовое поле называется TxtMark4. Напишите txtMark4.Content() или что-то еще, что вам нужно, чтобы прочитать содержимое текстового поля в вашей структуре в if-тесте, который выполняет TryParse

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";
    }
}
person Thomas Andreè Wang    schedule 07.02.2013