C++ Builder Tokyo 10.2.3 FMX安卓应用未点虚拟键盘Next崩溃求助
针对C++ Builder Tokyo 10.2.3 FMX安卓返回键崩溃问题的解决方案
兄弟,我之前在C++ Builder Tokyo里也碰到过类似的FMX安卓返回键崩溃问题,结合你的描述,给你几个靠谱的排查和解决方向:
1. 排查Edit控件的生命周期与内存引用问题
当你退出带Edit的表单回到上一页后,这个表单可能没有被正确释放,或者有其他控件/全局变量还持有Edit的指针,导致系统返回时访问了已释放的内存。试试这几个操作:
- 在表单的
OnDestroy事件里手动清理Edit的关联:void __fastcall TForm2::FormDestroy(TObject *Sender) { // 清空内容并解除父控件关联 Edit1->Text = L""; Edit1->Parent = nullptr; } - 检查是否有全局变量、回调函数或者其他表单的控件还保留着这个Edit的指针,确保这些引用在表单销毁时被清空。
2. 手动处理安卓返回键,避免键盘状态冲突
FMX对安卓原生返回键的处理有时候会和虚拟键盘状态冲突,尤其是Edit还持有焦点的时候。你可以重写表单的OnKeyDown事件,先处理键盘再关闭表单:
void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key, System::WideChar &KeyChar, TShiftState Shift) { if (Key == vkHardwareBack) { // 先让Edit失去焦点并隐藏虚拟键盘 if (Edit1->IsFocused()) { Edit1->ClearFocus(); IFMXVirtualKeyboardService *KeyboardService; if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXVirtualKeyboardService), &KeyboardService)) { KeyboardService->HideVirtualKeyboard(Edit1); } } // 关闭当前表单 Close(); Key = 0; // 拦截系统默认的返回键处理 } }
3. 检查C++ Builder 10.2.3的已知BUG与补丁
Tokyo 10.2.3本身存在一些FMX安卓的稳定性问题,尤其是输入控件和表单切换相关的。你可以:
- 安装Embarcadero针对10.2.3的最新补丁(比如官方的Update 3后续小补丁);
- 去Embarcadero的Quality Portal搜索类似的崩溃报告,看看有没有官方给出的临时解决方案。
4. 强制转移控件焦点,避免残留引用
在表单关闭时,把焦点从Edit转移到一个非输入控件(比如隐藏的Button),确保Edit不会因为持有焦点而被系统继续引用:
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { // 假设你有一个隐藏的Button控件HiddenBtn HiddenBtn->SetFocus(); }
内容的提问来源于stack exchange,提问作者mesutuk
相关产品推荐
相关产品推荐

