Jsk*_*Jsk 1 delphi combobox event-handling
我有一个程序n ComboBoxes和n Labels,我想更新相应的Label根据来自相邻的选择ComboBox,即ComboBox2会更新Label2。
我为每个ComboBox当前检查是否Combobox1或Combobox2已经触发事件处理程序使用相同的事件处理程序。有没有办法使用的一种方式ItemIndex的ComboBox传递到过程,如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)
此代码具有所需的行为,但显然不可扩展。
每个组件都有一个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)