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

如何访问FMX中TListBox项的TextSettings属性?

如何访问FMX中TListBox项的TextSettings属性?

嗨,我来帮你排查下问题出在哪~

首先你遇到的访问违规,核心问题有两个:

  • 索引越界了:你用BatchSets_ListBox.Items.Count作为ListItems的索引,但ListItems是0基的(第一个项索引是0)。刚执行完Items.Add后,Count会变成新的总数量,比如原来空列表,Add后Count=1,这时候你用1去访问ListItems,自然就越界了,应该用Count - 1来定位刚添加的项。
  • BeginUpdate期间的潜在问题:在BeginUpdate和EndUpdate的块里,ListBox会暂停内部的UI更新和控件初始化,这时候直接访问自动创建的ListItems可能会因为控件还没完全初始化而出问题。

不过即使修正了索引,还是有概率踩坑,更稳妥的方式是手动创建TListBoxItem实例,设置好属性后再添加到ListBox,这样你能完全掌控每个项的初始化过程,不会依赖ListBox的自动创建逻辑。

给你两种可行的修正方案:

方案一:修正索引(快速修复原有代码)

如果你想沿用原来的Items.Add方式,只需要把索引改成Count - 1,同时把BeginUpdate/EndUpdate用try-finally包起来,避免异常时忘记EndUpdate:

BatchSets_ListBox.Items.BeginUpdate;
try
  BatchSets_ListBox.Items.Clear;
  For i := 0 to (Length(MyList) - 1) do
  Begin
    BatchSets_ListBox.Items.Add(MyList[i].BATCH_SET_NAME);
    // 用Count-1访问刚添加的项,0基索引
    BatchSets_ListBox.ListItems[BatchSets_ListBox.Items.Count - 1].TextSettings.Font.Size := 18;
  End;
finally
  BatchSets_ListBox.Items.EndUpdate;
end;

方案二:手动创建项(推荐,更稳定)

这种方式可以彻底避免ListBox自动创建项带来的不确定问题,还能方便设置更多TextSettings属性:

var
  ListItem: TListBoxItem;
  i: Integer;
begin
  BatchSets_ListBox.Items.BeginUpdate;
  try
    BatchSets_ListBox.Items.Clear;
    For i := 0 to (Length(MyList) - 1) do
    Begin
      // 手动创建ListBoxItem,把ListBox作为所有者
      ListItem := TListBoxItem.Create(BatchSets_ListBox);
      try
        ListItem.Text := MyList[i].BATCH_SET_NAME;
        // 直接设置TextSettings属性,想改字体颜色、样式都可以在这里加
        ListItem.TextSettings.Font.Size := 18;
        // 示例:设置粗体和红色字体
        // ListItem.TextSettings.Font.Style := [TFontStyle.fsBold];
        // ListItem.TextSettings.FontColor := TAlphaColors.Red;
        // 添加到ListBox
        BatchSets_ListBox.AddObject(ListItem);
      except
        // 如果添加失败,释放创建的Item避免内存泄漏
        ListItem.Free;
        raise;
      end;
    End;
  finally
    BatchSets_ListBox.Items.EndUpdate;
  end;
end;

另外补充下:FMX的TListBox确实有ListItems属性,它是存储所有可见项的集合,但只有当项被完全初始化后才能安全访问,手动创建的方式能确保这一点,所以更推荐用方案二。

备注:内容来源于stack exchange,提问作者Sergio Bonfiglio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:33:02