当我单击 TListBox 中的任何项目时,索引超出范围 (-1)

Index out of range (-1) when I click on any item in the TListBox

名为 lboMtrlListTListBox 由数据库中的记录填充。当我 运行 应用程序时,数据显示正确。当我单击列表中的任何项目时,显示错误:

Index out of range (-1)

尽管列表不是空的。

这是填充 lboMtrlList 的代码:

procedure TfrmMakeQuote.FormCreate(Sender: TObject);
 begin
  con := TFDConnection.Create(nil);
  query := TFDQuery.Create(con);
  con.LoginPrompt := false;
  con.Open('DriverID=SQLite;Database=C:\Users\katiee\Documents\Embarcadero\Studio\Projects\ProgramDatabase;');
  query.Connection := con;
  performQuery;

  query.SQL.Text :=
  'SELECT [Material Description] FROM MtrlDatabase ORDER BY MtrlID';
 try
  query.Open;
  lboMtrlList.Items.Clear;
  while not query.EOF do
   begin
    lboMtrlList.Items.Add(query.Fields[0].AsString);
    query.Next;
   end;
  finally
   query.Close;
 end;
 //ledtDesc.Height :=  81;
 //ledtNotes.Height :=  51;
 end;

我希望能够双击 lboMtrlList 中的一个项目并将其移动到另一个名为 lboSelectedMtrlTListBox。这是代码:

procedure TfrmMakeQuote.lboMtrlListDblClick(Sender: TObject);
 begin
  lboMtrlList.Items.Add(lboSelectedMtrl.Items.Strings[lboSelectedMtrl.ItemIndex]);
 end;

I want to be able to double click on an item in the lboMtrlList and move it to another TListBox called lboSelectedMtrl.

您的代码与此相反。它正在尝试将项目从 lboSelectedMtrl 移动到 lboMtrlList。您收到边界错误是因为 lboSelectedMtrl 中没有选择任何项目(lboSelectedMtrl.ItemIndex 是 -1)。

交换 ListBox 变量,并添加一些错误检查:

procedure TfrmMakeQuote.lboMtrlListDblClick(Sender: TObject);
var
  Idx: Integer;
begin
  Idx := lboMtrlList.ItemIndex;
  if Idx <> -1 then
    lboSelectedMtrl.Items.Add(lboMtrlList.Items.Strings[Idx]);
end;