保持Delphi DFM文件与其PAS文件同步
我有一个Delphi项目,有很多DFM文件和匹配的PAS文件。我可以通过重建项目来编译PAS,但如何重建DFM文件并使其与PAS文件保持同步?保持Delphi DFM文件与其PAS文件同步,delphi,Delphi,我有一个Delphi项目,有很多DFM文件和匹配的PAS文件。我可以通过重建项目来编译PAS,但如何重建DFM文件并使其与PAS文件保持同步? 现在我从IDE中得到很多“[Variable.field]没有相应的组件。删除声明?”提示。简单的答案是:使用Delphi IDE编辑表单相关的.PAS文件,其任务是保持它们的同步。解决方案很简单 如果某个.pas文件具有关联的.dfm,请不要在IDE外部编辑该文件 不要在IDE外部编辑.dfm 不要编辑IDE所拥有的.pas文件的部分,该部分位于打开表
现在我从IDE中得到很多“[Variable.field]没有相应的组件。删除声明?”提示。简单的答案是:使用Delphi IDE编辑表单相关的.PAS文件,其任务是保持它们的同步。解决方案很简单
.pas
文件具有关联的.dfm
,请不要在IDE外部编辑该文件.dfm
.pas
文件的部分,该部分位于打开表单类定义和第一个私有
部分之间
type
TForm1 = class(TForm)
// Form designer property - keep out
// It is where the IDE adds components you drag/drop, event handlers
// generated via the Object Inspector or automatically by the IDE.
// It is the published section, and is used by the VCL streaming
// system to create controls that are on the form and attach event
// handlers at runtime. Leave it alone. If you need something in
// a published state, add a new published section below the private
// section.
private
// Yours - edit all you want
public
// Yours - edit all you want
end;
.pas
文件的第一部分和.dfm
中删除声明,并删除空事件处理程序问题不在于如何保持文件同步,而在于如何使它们不同步。IDE不会这样做。您是如何使文件不同步的?事实上,如果您在IDE之外手动进行更改,可能会发生这种情况。不要这样做。使用IDE进行此类修改,您就不会有问题了。您是否从.pas文件的“表单发布”部分手动删除组件,而不是在表单设计器中删除组件?这些表单和数据模块是在主项目中还是在包中?后者确实带来了问题。在可执行文件中使用包中的表单时,它们仍然需要(单独的)dfm。其他资源也是如此。在我的办公室里,有一个包依赖于这些资源,我必须在其中实现一个构建后事件,以确保在包的输出目录中也更新了资源。您没有注意到,如果从通过对象检查器创建的事件处理程序中删除代码,然后保存,事件处理程序自动消失?如果您向PAS文件中的类(DFM使用的类)添加一个变量,例如,当您将DFM视为文本时,第一行显示的是,例如,我的DFM文件中的第一行是,我的PAS文件中的对象frmAppTools:TfrmAppTools。我已经向TfrmAppTools添加了一些新变量,这些新变量就是我得到的红色错误窗口,该窗口显示“Field frmAppTools.newfield没有相应的组件。是否删除声明?”因此,我似乎需要告诉DFM,TfrmAppTools类中有新变量,它需要以某种方式重新加载它。如果我向TfrmAppTools类添加一个新变量,我将为该新变量获得一个新的红色错误窗口。@TomKelly我不知道新变量的含义。如果要向表单中添加组件,请从IDE中执行。如果要添加新变量,请将它们添加到我上面指出的部分,而不是表单管理发布部分。在我的回答中,我已经非常清楚地说明了允许(或不允许)手动编辑表单代码的位置。IDE处理告诉DFM存在新的组件,如果它没有这样做,那么您就不正确地编辑了它。再次阅读我的答案,特别是代码中的注释。我认为可能发生的情况是,我的Delphi项目在我的多目录链接路径中发现了一个过时的DCU,然后它在我的项目目录中找到了DCU。我的项目中的DCU与我的PAS源代码匹配。谢谢大家的回复。我已经给每个人提供了+反馈。我想可能发生的是,我的Delphi项目在我的多目录链接路径中发现了一个过时的DCU,然后它在我的项目目录中找到了DCU。我的项目中的DCU与我的PAS源代码匹配。谢谢大家的回复。我已经给每个人提供了+反馈。