Pascal:如何 select 列表框 1 中的项目在列表框 2 中显示结果?

Pascal: How can I select items from ListBox1 to display results in listBox 2?

我是 Pascal 编程的新手。我一直在关注与 possible.For 我的程序一样接近的在线教程,我希望能够 select 列表框 1(国家/地区)中的项目,并将结果(城市)显示在列表框中2. 我知道可能有一个简单的解决方案。感谢任何帮助。

       procedure TForm1.ListBox1Enter(Sender: TObject);
           begin
               ListBox1.Items.Add('America');
               ListBox1.Items.Add('United Kingdom');
               ListBox1.Items.Add('France');
           end;

举例来说,结果可能是 美国-纽约、华盛顿、凤凰城 英国-约克、伦敦、曼彻斯特 西班牙 - 马德里、巴塞罗那、瓦伦西亚

列表框有一个 ItemIndex 属性,它告诉您所选项目的 Items[] 数组的索引(如果 none 是 -1) ;

因此,您可以使用 ItemIndex 获取列表框 (AString := Listbox1.Items[ListBox1.ItemIndex]) 中项目的文本值,并使用它在第二个 LB 上调用 Items.Add

显然,您可以在代码中访问列表框 Items[] 数组中的任何值,无论它是否在 gui 中显示为选中状态。

请注意,与 Delphi 中的许多其他数组一样,ListBox 的 Items 数组是从零开始的。

我已经为您创建了一个快速示例,只需创建一个新表单,在其上放置 2 个列表框,并为该表单声明 OnCreate 处理程序,为第一个 ListBox 声明 OnClick 处理程序。

请注意,记录常量数组的使用只是一个快速占位符。

interface

uses
  Vcl.Forms, Vcl.StdCtrls;

type

  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

type
  //just a quick Record to contain a country and 3 cities
  //this should be an dynamic array later.. or a class
  TCountryCitiesRecord = record
    Country: string;
    Cities: array[0..2] of string;
  end;

const
  //declare our 3 countries and their cities as constant
  //this might be loaded from a file or whatever later
  FCountriesCities : array[0..2] of TCountryCitiesRecord  =
  ((Country: 'USA'; Cities: ('New York','Washington','Phoenix')),
  (Country: 'United Kingdom'; Cities: ('York','London','Manchester')),
  (Country: 'Spain'; Cities: ('Madrid','Barcelona','Valencia')));

//onCreate of Form
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  //Initialize the first ListBox with the countries
  for I := Low(FCountriesCities) to High(FCountriesCities) do
    ListBox1.Items.Add(FCountriesCities[I].Country)
end;

//onclick of listbox1
procedure TForm1.ListBox1Click(Sender: TObject);
var
    I: Integer;
begin
  //clear the second listbox
  ListBox2.Items.Clear;
  //if an item is selected
  if ListBox1.ItemIndex <> -1 then
    //add the cities, that belong to the currently selected country
    //to the second listbox
    for I := Low(FCountriesCities[ListBox1.ItemIndex].Cities) to High(FCountriesCities[ListBox1.ItemIndex].Cities) do
      ListBox2.Items.Add(FCountriesCities[ListBox1.ItemIndex].Cities[I])
end;

end.