FireMonkey ListView的ItemClickEx事件Pascal转C++:类型判断实现咨询
FireMonkey ListView ItemClickEx事件的Pascal转C++实现(核心类型判断解决)
刚好帮你把这段FireMonkey ListView的Pascal代码转换成C++版本,重点解决你疑惑的ItemObject is TListItemAccessory类型判断问题:
原Pascal代码
procedure TfrmCategory.lstListCategoryItemClickEx(const Sender: TObject; ItemIndex: Integer; const LocalClickPos: TPointF; const ItemObject: TListItemObject); begin if ItemObject is TListItemAccessory then begin ShowMessage('Acessory clicked'); end; end;
对应的C++实现
在C++里没有Delphi的is运算符,我们可以用dynamic_cast来实现相同的类型判断逻辑——如果ItemObject确实是TListItemAccessory类型,dynamic_cast会返回有效的指针,否则返回nullptr。完整代码如下:
void __fastcall TfrmCategory::lstListCategoryItemClickEx(TObject * const Sender, int ItemIndex, const TPointF &LocalClickPos, TListItemObject * const ItemObject) { // 用dynamic_cast做类型判断,等价于Delphi里的"is" if (dynamic_cast<TListItemAccessory*>(ItemObject)) { ShowMessage(L"Acessory clicked"); } }
补充说明
- 注意C++ Builder的Unicode环境下,字符串要加
L前缀(比如L"Acessory clicked"),或者用_D("Acessory clicked")宏保证兼容性。 dynamic_cast要求目标类拥有虚函数,而FireMonkey的TListItemObject及其派生类本身就满足这个条件,所以可以放心使用。
内容的提问来源于stack exchange,提问作者relayman357
相关产品推荐
相关产品推荐

