1

我想要一个包含以下项目的 2 下拉组合框:

  • Combo1:宠物水果。

  • Combo2:如果 Pets 被选中,则 combobox2items.Add:Dog、Cat、Chicken

如果水果被采摘,则 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;

我的代码不起作用。如何以简单的方式解决这个问题?

4

2 回答 2

3

您需要像这样使用 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;

您还需要在添加新项目之前清除组合框;

于 2013-10-24T09:37:02.740 回答
1

当涉及到组合框依赖项时,我喜欢构建一个表示这些依赖项的字典。基本上,您的 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;

当然,可以对其进行改进和调整以使其更可靠,但其核心工作得很好。

于 2013-10-24T10:08:36.047 回答