Pascal:如何从ListBox1中选择项目以在listBox 2中显示结果?

时间:2016-02-29 21:15:24

标签: delphi listbox pascal lazarus

我是Pascal Programming的新手。我一直在关注在线教程。对于我的程序,我希望能够从列表框1(一个国家)中选择一个项目,并将结果(城市)显示在列表框2中。我知道它在那里可能是一个简单的解决方案任何帮助表示赞赏。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

我为您创建了一个快速示例,只需创建一个新表单,在其上放置2个列表框,并为表单声明OnCreate Handler,为第一个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.