iOS 上的 StringReplace 行为

StringReplace behavoir on iOS

我有一个 TEdit 框,在它的 KeyUp 事件中,我将用空白 "" 替换任何出现的 "-"。当我在 Win32 上使用 运行 时,它完全按照我的预期工作 - 每当我键入 - 键时,它都会短暂显示然后被删除。

当我在 iOS 上 运行 并重复按 - 键时,我得到的结果是删除编辑框中的最后一个字符 每隔一个 我按 - 的时间。例外是第 2 次和第 3 次按下,我两次都删除了最后一个字符。它应该只是删除 -.

例如如果我从“编辑”中的 123456 开始,然后开始只按减号键,我就会得到你在下面这个 gif 中看到的内容:

以表格形式显示的结果如下:

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 工作。

正确 处理此问题的方法是将 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;
    }
}