【问题标题】:StringReplace behavoir on iOSiOS 上的 StringReplace 行为
【发布时间】:2019-09-09 21:06:12
【问题描述】:

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

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

例如如果我在编辑中从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);
}

我在这里缺少什么基本的东西?我正在使用 C++ Builder 在 Rad Studio 10.3.2 中工作。

【问题讨论】:

    标签: firemonkey c++builder c++builder-10.3-rio


    【解决方案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;
        }
    }
    

    【讨论】:

    • 感谢 Remy,当我按照您的建议将您的代码放入 KeyDown 事件时解决了这个问题。放入 KeyUp 时不起作用。
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多