如何触发一个表单中所有TMemo组件的所有onChange事件

How to trigger all onChange events of all TMemo components in a form

我想在显示表单时触发表单中所有 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);

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

if Assigned(m.OnChange) then
  m.OnChange(m);