Delphi、Lazarus - 列表框越界 (0) TString

Delphi, Lazarus - Listbox out of bound (0) TString

我根本无法理解以下错误。

列表框越界 (0) TString

我有一个带有列表框的表单或 window,下面的代码应该可以使用它。它假设从 ini 文件中获取字符串列表并设置到列表框。

IF selectedbox1count <> 0 then
BEGIN
   FOR i:=0 to selectedbox1count-1 do
      selectedbox.items[i] := AInifile.ReadString('DATAVIEW2', 'SHIFT1CHART'+(i+1), ' ');
END;

但是它总是在第一次到达 selectedbox.items[i] 行时弹出一条错误消息。读取 ini 文件 returns "NEW CHART 2" 字符串。我在这里遗漏了什么吗?

更新:selectedbox1count 保存来自 ini 文件的值 ...

错误告诉您列表框 selectedbox 是空的。我希望错误更像这样:

List index out of bounds (0)

这告诉您索引 0 无效,这只能表示列表框中没有项目。

推测selectedbox1count实际上不是列表框中的项目数。使用 selectedbox.Countselectedbox.Items.Count 获取它。

您只能修改已经存在的项目。很明显,您需要向其余部分添加项目。通过调用 selectedbox.AddItemselectedbox.Items.Add 来实现。

for i := 0 to selectedbox1count - 1 do
  selectedbox.AddItem(...);

根据您的评论,您正在尝试向列表框添加项目,但是 Items[] 属性 用于 reading/modifying 个现有项目

您需要更像这样的东西:

SelectedBox.Items.BeginUpdate;
try
  SelectedBox.Items.Clear;
  SelectedBox1Count := AInifile.ReadInteger(...);
  for i := 0 to SelectedBox1Count-1 do
    SelectedBox.Items.Add(AInifile.ReadString('DATAVIEW2', 'SHIFT1CHART'+(i+1), ' '));
finally
  SelectedBox.Items.EndUpdate;
end;