我是Pascal Programming的新手。我一直在关注在线教程。对于我的程序,我希望能够从列表框1(一个国家)中选择一个项目,并将结果(城市)显示在列表框2中。我知道它在那里可能是一个简单的解决方案任何帮助表示赞赏。
procedure TForm1.ListBox1Enter(Sender: TObject);
begin
ListBox1.Items.Add('America');
ListBox1.Items.Add('United Kingdom');
ListBox1.Items.Add('France');
end;
结果只是例如 美国 - 纽约,华盛顿,凤凰城 英国 - 约克,伦敦,曼彻斯特 西班牙 - 马德里,巴塞罗那,瓦伦西亚
答案 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.