根据触发事件的组合框更新相应的标签

Jsk*_*Jsk 1 delphi combobox event-handling

我有一个程序n ComboBoxesn Labels,我想更新相应的Label根据来自相邻的选择ComboBox,即ComboBox2会更新Label2

在此处输入图片说明

我为每个ComboBox当前检查是否Combobox1Combobox2已经触发事件处理程序使用相同的事件处理程序。有没有办法使用的一种方式ItemIndexComboBox传递到过程,如Sender.ItemIndex?这目前不是一个选项,并给出了错误'TObject' does not contain a member named 'ItemIndex'

procedure TForm2.ComboBoxChange(Sender: TObject);
begin
  if Sender = ComboBox1 then
    Label1.Caption := ComboBox1.Items.Strings[ComboBox1.ItemIndex]
  else
    Label2.Caption := ComboBox2.Items.Strings[ComboBox2.ItemIndex];
end;
Run Code Online (Sandbox Code Playgroud)

此代码具有所需的行为,但显然不可扩展。

Rem*_*eau 5

每个组件都有一个Tag继承自的属性TComponent,其中Tag是一个指针大小的整数。因此,您可以将每个TLabel指针直接存储在相应的 中TComboBox.Tag,例如:

procedure TForm2.FormCreate(Sender: TObject);
begin
  ComboBox1.Tag := NativeInt(Label1);
  ComboBox2.Tag := NativeInt(Label2);
end;
Run Code Online (Sandbox Code Playgroud)

这样,ComboBoxChange()然后可以直接访问TLabel已更改的TComboBox,例如:

procedure TForm2.ComboBoxChange(Sender: TObject);
var
  CB: TComboBox;
begin
  CB := TComboBox(Sender);
  if CB.Tag <> 0 then
    TLabel(CB.Tag).Caption := CB.Items.Strings[CB.ItemIndex];
end;
Run Code Online (Sandbox Code Playgroud)