Firemonkey:在 运行 时间将子控件添加到 TListViewItem

Firemonkey: Add child control to TListViewItem at run time

我正在尝试在 运行 时间内将 TEdit 控件添加到 TListView 控件。我想将 TEdit 控件设置为属于我的 TListView 的所选 TListViewItem 的父级,但是,我找不到执行此操作的方法。

最初,我试过这个:

TEdit * MyEdit = new TEdit( this );
MyEdit->Parent = MyListView->Selected;

但是,这给了我以下错误:

[bcc32 Error] E2034 Cannot convert 'TListViewItem *' to 'TFmxObject *'

一时兴起,我试图将列表视图中的所选项目类型转换为 TFmxObject,如下所示:

MyEdit->Parent = (TFmxObject *)MyListView->Selected;

编译时,这会在 运行 时导致访问冲突。

我搜索了很多文档和论坛帖子,但找不到太多关于在代码中将控件动态添加到列表视图项的信息。我已经看到建议使用样式编辑器的解决方案,但我想尽可能避免这种情况。

如何将控件的父级设置为 TListView 中的某个项目?有没有更好/更合适的方法在 运行 时间内向 TListViewItem 添加控件?

根据 Embarcadero documentation, TListViewItem is not a TFmxObject descendant and thus it can not be set as a Parent to the desired TEdit instance. It does not have Children property as well. Nor do the TextObject, DetailObject etc. (the TListItemObject descendants contained in TListViewItem) ascend from TFmxObject。 看来你有以下出路。

  1. 编写并注册另一个 ListViewItem class 并在您的 ListView
  2. 中实现它
  3. 参见this and this SO links.可能它们可能有用。
  4. 考虑改用 TListBoxTListBoxItems 可以作为其他控件的父级。