Разрешать только целые числа в combobox winform

88
15

В настоящее время я работаю над программированием редактора фотографий с помощью С#, и в настоящее время я разрабатываю возможность разрешить ручному инструменту изменять размеры. Он работает безупречно, за исключением одной проблемы. Вот некоторая справочная информация: поэтому внутри выделенного ящика есть 10 элементов, каждая из которых - цифры 1 - 10. Если я выберу один или непосредственно напечатаю некоторое число в поле со списком, он установит размер пера. Проблема в том, что если я наберу букву, она даст мне

IndexOutOfRangeException

,

Есть ли способ, которым я могу это сделать, поэтому combobox принимает только целые числа и float? В основном я имею в виду, если я нажму 3 , размер пера изменится на 3. Но если я нажму H , он ничего не сделает.

спросил(а) 2021-01-19T12:51:50+03:00 2 месяца, 4 недели назад
1
Решение
61

Вы можете сделать любой из двух вариантов. Первый вариант ограничивает пользователя вводить comboobx с помощью функции Disable typing. Это может быть достигнуто путем предоставления этого кода в page_load

 comboBox1.DropDownStyle to ComboBoxStyle.DropDownList

или Получите доступ к следующим значениям:

       if (int.TryParse(comboBox1.Text, out BreshSize))
{
// Proceed
}
else
{
//Show errror message
}

ответил(а) 2021-01-19T12:51:50+03:00 2 месяца, 4 недели назад
44

Эта реализация должна позволить вам увидеть, является ли новое значение целым числом и действует соответствующим образом. Вы должны поместить это внутри кода, когда начнете проверять значение. "2" будет заменен на строку, которую вы проверяете.

    int currInt = 0;
int tryInt = 0;
if(int.TryParse("2", out tryInt))
{
currInt = tryInt;
}
else
{
//reset or display a warning
}

ответил(а) 2021-01-19T12:51:50+03:00 2 месяца, 4 недели назад
44

Кроме того, вы можете использовать обработчик KeyPress, чтобы убедиться, что набраны только цифры.


private void txtPenToolSize_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}

ответил(а) 2021-01-19T12:51:50+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема