如何从 ListBox 中获取所有选定的项目到 EditBox 中?

How to get ALL selected items from ListBox into an EditBox?

我正在尝试(第一次)使用 ListBox 而不是 ComboBox 到 select 字符串,然后它将填充一个编辑框,该编辑框将用于构建 SQL 字符串.

我将 ListBox 设置为 MultiSelectExtendedSelect 都设置为 True。但是,当我 运行 下面的代码时,我只从列表框到编辑框得到一个 selected 项目。

过去 48 小时我一直在寻找帮助,但没有任何效果。我错过了什么或做错了什么?

procedure TfrmQuery.lbSelectExit(Sender: TObject);
var
  i : integer;    
begin 
  for i := 0 to lbSelect.SelCount -1 do
  begin
    if lbselect.selected[i] then
    begin
      edQryScript.Text := 'Select ' + lbSelect.items.Strings[i] + ' from ';
    end;
  end;
end;

我了解到您 select 必须出现在 ListBox 的 SELECT 子句中的字段,然后组成 SELECT 语句。

您正在浏览所有 selected 项目,但您每次只将一个项目放入 SELECT 中,然后在下一次迭代中,您会丢失之前的信息。

正如@amigoJack 提到的,我猜是 lbSelected.Count 而不是 lbSelected.SelCount 会在遍历 selected 项而不是总数时停止迭代的项目,其中它仍然必须决定是否 selected 或不(如果 lbselect.selected[i] then ...)。

尝试这样的事情:

procedure TfrmQuery.lbSelectExit(Sender: TObject);
var
  i : integer;    
begin 
  for i := 0 to lbSelect.Count -1 do
  begin
    if lbselect.selected[i] then
    begin
      if edQryScript.Text <> '' then
        edQryScript.Text := edQryScript.Text + ', ';
      edQryScript.Text := edQryScript.Text + lbSelect.items.Strings[i];
    end;
    edQryScript.Text := 'Select ' + edQryScript.Text + ' from ';
  end;
end;

这样每次迭代都会将字段添加到之前 edQryScript.Text 中的字段中。当我们已经拥有 select 语句的所有字段时,更容易打扰 Select ... from