You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FireMonkey中如何访问TComboEdit的ListBox组件?

解决TComboEdit在OnPopup事件中访问下拉列表控件的问题

TComboEdit没有直接暴露ListBox成员,要访问其下拉列表控件,需通过FireMonkey的样式资源查找实现,具体步骤如下:

1. 获取下拉ListBox控件

在OnPopup事件中,先确保控件样式已加载,再通过FindStyleResource方法查找下拉列表对应的ListBox(默认样式中该控件命名为PopupListBox,若使用自定义样式需对应修改名称):

void __fastcall TForm1::ComboEdit1Popup(TObject *Sender)
{
    TComboEdit *comboEdit = static_cast<TComboEdit*>(Sender);
    // 确保样式已加载
    if (!comboEdit->StyleLookup.IsEmpty())
        comboEdit->ApplyStyleLookup();
    
    // 查找下拉ListBox
    TListBox *popupListBox = static_cast<TListBox*>(comboEdit->FindStyleResource(L"PopupListBox"));
    if (popupListBox)
    {
        // 后续操作写在此代码块内
    }
}

2. 修改样式属性(如阴影柔化度)

找到ListBox后,即可像操作TComboBox的ListBox一样修改样式数据:

if (popupListBox)
{
    float magnify_ratio = 1.0f; // 示例缩放比例,可根据需求调整
    popupListBox->StylesData[L"shadow.Softness"] = TValue::From<float>(0.3 * magnify_ratio);
}

3. 取消所有项的选中状态

遍历ListBox的ListItems,将每个项的IsSelected设为false:

if (popupListBox)
{
    for (int i = 0; i < popupListBox->Items->Count; i++)
    {
        popupListBox->ListItems[i]->IsSelected = false;
    }
}

注意事项

  • 若使用自定义样式,需在Style Designer中确认下拉列表控件的实际名称,替换代码中的PopupListBox。
  • 必须添加空指针检查,避免样式未加载或控件不存在时触发错误。

内容的提问来源于stack exchange,提问作者Bruce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:16:13