我想要一个带有以下项目的2下拉组合框:
COMBO1: 宠物 水果
Combo2: 如果选择了Pets,则使用combobox2items.Add: 狗,猫,鸡
如果采摘了水果,那么combobox2items.Add: 甜瓜,橘子,苹果
所以我尝试这样做:
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items.Add('Pets');
ComboBox1.Items.Add('Fruits');
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
if ComboBox1.ItemIndex = 1) then
ComboBox2.Items.Add('Dog');
ComboBox2.Items.Add('Cat');
ComboBox2.Items.Add('Chicken');
if ComboBox1.ItemIndex = 2) then
ComboBox2.Items.Add('Melon');
ComboBox2.Items.Add('Orange');
ComboBox2.Items.Add('Apple');
end;
我的代码无效。如何以简单的方式解决这个问题?
答案 0 :(得分:2)
你需要像这样使用begin..end:
if ComboBox1.ItemIndex = 1 then
begin
ComboBox2.Items.Add ('Dog');
ComboBox2.Items.Add ('Cat');
ComboBox2.Items.Add ('Chicken');
end;
if ComboBox1.ItemIndex = 2 then
begin
ComboBox2.Items.Add ('Melon');
ComboBox2.Items.Add ('Orange');
ComboBox2.Items.Add ('Apple');
end;
此外,您需要在添加新项目之前清除组合框;
答案 1 :(得分:1)
当涉及到Combo Box依赖项时,我喜欢构建一个表示这些依赖项的Dictionary。基本上,你有你的字典保持ComboBox1的项目作为键。当ComboBox1更改时,您将ComboBox2的Items属性重新分配给所选Key后面的StringList。这样可以节省每次更改ComboBox1索引时删除/添加单个字符串的麻烦。
procedure TForm1.FormCreate(Sender: TObject);
begin
FComboBoxDependencies := TDictionary<string,TStringList>.Create;
FComboBoxDependencies.Add('Pets',TStringList.Create);
FComboBoxDependencies['Pets'].Add('Dog');
FComboBoxDependencies['Pets'].Add('Cat');
FComboBoxDependencies['Pets'].Add('Chicken');
FComboBoxDependencies.Add('Fruit',TStringList.Create);
FComboBoxDependencies['Fruits'].Add('Orange');
FComboBoxDependencies['Fruits'].Add('Apple');
FComboBoxDependencies['Fruits'].Add('Melon');
//Trigger Change Event at start to display the selected Key
ComboBox1Change(self);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ComboBox2.Items := FComboBoxDependencies[ComboBox1.Text]; //Grab Items to be displayed from dictionary
ComboBox2.ItemIndex := 0; //Set Itemindex to 0 to show first item
end;
当然,这可以通过改进和调整来更加可靠,但其核心工作非常好。