在Delphi中更改事件类型后,组件编译器不会抛出错误

在Delphi中更改事件类型后,组件编译器不会抛出错误,delphi,events,Delphi,Events,我的许多程序中都使用了自定义的Delphi组件 代码升级后,我更改了自定义事件TUvValidateEvent类型(参数计数和类型),但是Delphi(我使用XE1或简单地使用XE)编译器编译了我的程序,并且没有警告我需要更改的依赖项 如何自动检查以修复它,而不用手动查找所有事件使用 样本: Component.pas //OLD TUvValidateEvent = procedure(ErrMsg: UnicodeString) of object; //NEW TUvValid

我的许多程序中都使用了自定义的Delphi组件

代码升级后,我更改了自定义事件
TUvValidateEvent
类型(参数计数和类型),但是Delphi(我使用XE1或简单地使用XE)编译器编译了我的程序,并且没有警告我需要更改的依赖项

如何自动检查以修复它,而不用手动查找所有事件使用

样本:

Component.pas
//OLD
  TUvValidateEvent = procedure(ErrMsg: UnicodeString) of object; 

//NEW
  TUvValidateEvent = procedure(Sender: TObject; Data: TUvValues; var ErrMsg: UnicodeString) of object;

Code.pas

procedure TMyForm.OnUvValidate(ErrMsg: UnicodeString); //Need to find this automatically.

另外,更改事件属性名称是我当前使用的修复程序,但是我不希望这样做。

编译器找不到这种形式的类型不匹配,因为编译器没有参与。.dfm文件中指定的属性仅在运行时解析。当它们被解析时,在运行时也没有类型检查


所以,你需要自己找到这些。你可以用任何像样的文件搜索工具来实现这一点。例如,我会用它来做这件事。或者您可以使用DelphiIDE中的文件查找工具。或在您喜爱的文本编辑器中的“在文件中查找”搜索

您是指通过对象检查器分配的事件吗?是的,我对99.9%的事件使用对象检查器。剩下的0.1%我知道并记得很清楚,可以用手检查。然后你可以试试。我相信“打开/关闭所有表单”应该会对您有所帮助。@UliGerhardt当新事件具有不同的名称时,这是一个很好的建议,但Delphi只在保存时检查事件处理程序的兼容性,而不是在关闭未修改的表单时检查,因此如果事件仍然存在(即使使用不同的类型),打开和立即关闭表单也不会有帮助。但是,打开所有表单并单击每个表单的“保存”按钮可能会导致错误。即使表格仍将保持不变。