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.
我是 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.