【问题标题】:Firemonkey: Add child control to TListViewItem at run timeFiremonkey:在运行时将子控件添加到 TListViewItem
【发布时间】:2016-02-06 22:38:55
【问题描述】:

我试图在运行时将TEdit 控件添加到TListView 控件。我想将TEdit 控件设置为属于我的TListView 的选定TListViewItem,但是,我找不到这样做的方法。

原来,我试过这个:

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

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

[bcc32 错误] E2034 无法将 'TListViewItem *' 转换为 'TFmxObject *'

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

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

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

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

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

【问题讨论】:

    标签: c++ firemonkey c++builder-xe8


    【解决方案1】:

    根据 Embarcadero documentation, TListViewItem 不是 TFmxObject 后代,因此不能将其设置为 Parent 到所需的 TEdit 实例。它也没有Children 属性。 TextObjectDetailObject 等(TListItemObject 包含在TListViewItem 中的后代)ascend fromTFmxObject 也没有。 看来你有以下出路。

    1. 编写并注册另一个ListViewItem 类并在您的ListViews 中实现它或
    2. 请参阅 thisthis SO links. 可能,它们可能有用。
    3. 考虑改用TListBoxTListBoxItems 可以作为其他控件的父级。

    【讨论】:

    • 我认为建议 3 是这里故事的寓意。 TListBox 看起来更适合用来实现我的目标。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多