StringReplace behavior на iOS
У меня есть TEdit
коробка и в ней KeyUp
событие, я заменяю любое вхождение "-"
с пробелом, ""
. Когда я запускаю Win32, он работает именно так, как я ожидал - каждый раз, когда я набираю-
клавиша появляется на короткое время, а затем удаляется.
Когда я запускаю iOS и несколько раз нажимаю кнопку -
key я получаю результат удаления последнего символа в поле редактирования каждый раз, когда нажимаю-
. Исключением являются 2-е и 3-е нажатие, при которых я удаляю последний символ оба раза. Нужно просто удалить-
.
например, если я начну с 123456
в Edit и начав нажимать только клавишу минус, я получаю то, что вы видите на этом гифке ниже:
В табличной форме результаты следующие:
void __fastcall TForm1::EditConstantKeyUp(TObject *Sender, WORD &Key, System::WideChar &KeyChar,
TShiftState Shift)
{
if (KeyChar == 45) { // minus key pressed (ascii code for that key is 45)
EditConstant->Text = StringReplace(EditConstant->Text, "-", "", TReplaceFlags() << rfReplaceAll);
}
Что мне здесь не хватает? Я работаю в Rad Studio 10.3.2 с помощью C++ Builder.
1 ответ
Правильный способ справиться с этим, чтобы установитьKey
/KeyChar
параметр на 0, чтобы отклонить нажатие клавиши и не изменять TEdit::Text
совсем.
Попробуйте что-то вроде этого:
// or, use the OnKeyDown event instead...
void __fastcall TForm1::EditConstantKeyUp(TObject *Sender,
WORD &Key, System::WideChar &KeyChar, TShiftState Shift)
{
if (Key == 0)
{
if (KeyChar == _D('-'))
KeyChar = 0;
}
else
{
if ((Key == vkMinus) || (Key == vkSubtract))
Key = 0;
}
}