У меня есть компонент NumericTextBox, который расширяет TextBox в моем приложении WinForms.Чтобы отфильтровать символы, вводимые в текстовое поле, я переопределил метод OnKeyPress и проверил числовые коды клавиш из перечисления ключей.
Это прекрасно работает.
Моя проблема состоит в том, чтобы расширить этот NumericTextBox, поэтому я создал CurrencyTextBox и вставил этот коэффициент для форматирования и т. д. *
Мое решение сделать расширяемый NumericTextBox - создать метод с массивом char для принятых символов для этого текстового поля, которое не являетсяномера.Поэтому в моем методе OnKeyPress я выполняю итерацию в своем массиве символов, чтобы проверить, находится ли нажатая клавиша внутри, и разрешаю эту клавишу.
Моя проблема заключается в том, что в моем NumericTextBox, поскольку я разрешаю вводить только цифры, я не могу набратьзапятые и точки, в KeyPress код имеет OEMComma и OEMPeriod, которые не совпадают с кодами символов (',', '.').
Мой код, который проверяет принятые символы, выглядит следующим образом:
protected override void OnKeyDown(KeyEventArgs e)
{
...
var acceptedChars = false;
// AcceptedChars is a String Property with all chars that this textBox should accept
foreach (var acceptedChar in AcceptedChars.ToCharArray())
{
if (acceptedChar == Convert.ToChar(e.KeyCode))
{
acceptedChars = true;
break;
}
}
...
}
Когда я нажимаю запятую, KeyCode поставляется с 188, то есть OEMComma, функция Convert.ToChar () преобразует его в '1/4'.
PS: IЯ не использую событие OnKeyPress, потому что я хочу предотвратить ввод и не исправить то, что было напечатано.