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;
    }
}
Другие вопросы по тегам