【发布时间】:2020-10-18 07:20:31
【问题描述】:
我在为动态组合框创建事件时遇到问题。
当我点击按钮时,此时在滚动框、标签、编辑和按钮中创建动态面板以销毁面板。
我会将事件 onCreate 和 onChange 添加到第一个组合框。 第一个组合框将具有第一个值(类别),第二个 - 子类别(选择第一个时)。
如何使工作事件 onCreate 和 onChange?
代码:
procedure TfrmGenerateExam.aAnulujExecute(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TfrmGenerateExam.aDodajNoweSzczegolyExecute(Sender: TObject);
var
dynPanel: TPanel;
dyncbKategoria: TComboBox;
dyncbPodkategoria: TComboBox;
begin
dynPanel := TPanel.Create(ScrollBox);
try
with dynPanel do
begin
{Panel properties}
end;
dyncbKategoria := TComboBox.Create(dynPanel);
with dyncbKategoria do
begin
Parent := dynPanel;
Top := 29;
Left := 5;
Width := 245;
Height := 21;
OnCreate := setKategoria;
OnChange := setPodkategoria;
end;
end;
Panel.Add(dynPanel);
cbKategoria.Add(dyncbKategoria);
cbPodkategoria.Add(dyncbPodkategoria);
except
dynPanel.Free;
raise;
end;
end;
代码 onCreate {dosent work add items}:
procedure TfrmGenerateExam.setKategoria(Sender: TObject);
var
firstComboBox : TComboBox;
begin
with Query do begin
SQL.Text :={SQL script}
Open;
try
while not Eof do
begin
first.Items.Add(Fields[0].AsString);
Next;
end;
finally
Close;
end;
end;
代码 onChange {dosent 工作添加项目}:
procedure TfrmGenerateExam.setPodKategoria(Sender: TObject);
var
firstComboBox : TComboBox;
secondComboBox : TComboBox;
begin
with Query do begin
SQL.Text :={SQL script using value from first combobox}
Open;
try
while not Eof do
begin
secondComboBox.Items.Add(Fields[0].AsString);
Next;
end;
finally
Close;
end;
end;
【问题讨论】:
-
我不知道你的问题是什么。您能否进行编辑以提高问题的重点。
-
这是太多无法筛选的代码。请编辑您的问题,将代码替换为 minimal reproducible example(强调“最小”),以展示您要解决的问题。
-
@RemyLebeau 好的,我编辑了
-
您还应该删除所有 SQL。这是不必要的,并且由于我们没有您的数据库,因此代码执行无法重现。
-
即使删除了SQL,问题本身也不是很清楚。您到底想完成什么,您遇到的问题到底是什么?请澄清问题。控件没有 OnCreate 事件,只有 Forms 有。而且您已经知道如何分配 OnChange 事件处理程序。在我看来,您似乎不知道如何识别更改了哪个 ComboBox(提示,查看 Sender 参数),或者要更新哪个第二个 ComboBox(提示,使用 TComboBox.Tag 属性将 2 个 TComboBox 控件链接在一起)。
标签: delphi