0

当显示表单时,我想触发表单中所有 TMemo 组件的所有 onChange 事件。

为此,我使用以下代码:

var
  i: integer;
  m: tmemo;
begin
  for i := 0 to componentcount - 1 do
  begin
    if components[i] is tmemo then
    begin
      m := components[i] as tmemo;
      m.onchange(m);
    end;
  end;
end;

问题是,我在上面的循环中遇到了一些访问冲突,可能是因为某些备忘录没有 onChange 事件。

在下面一行触发之前,我如何测试事件是否存在?

m.onchange(m);
4

1 回答 1

3

您需要在调用它之前检查是否分配了事件处理程序:

if Assigned(m.OnChange) then
  m.OnChange(m);
于 2022-01-18T15:58:27.120 回答