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

时间:2015-06-05 20:21:09

标签: delphi listbox indexoutofboundsexception lazarus tstringlist

我似乎无法理解以下错误。

列表框越界(0)TString

我有一个带有列表框的表单或窗口,以下代码应该可以使用它。它假设从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文件将返回“NEW CHART 2”字符串。我在这里错过了什么吗?

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

2 个答案:

答案 0 :(得分:5)

根据您的评论,您尝试将项目添加到ListBox,但Items[]属性用于读取/修改现有项目。< / p>

你需要更像这样的东西:

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;

答案 1 :(得分:3)

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

  

列出索引越界(0)

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

据推测,selectedbox1count实际上并不是列表框中的项目数。通过selectedbox.Countselectedbox.Items.Count获取。

您只能修改已存在的项目。很明显,你需要在其余部分添加项目。通过致电selectedbox.AddItemselectedbox.Items.Add来完成此操作。

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