光看帮助你大概搞不清楚这个有什么用。我举一个例子,一般mainform都有很多菜单按钮,用来打开不同的窗口,通常做法要在uses部分添加所有要引用的单元,十分麻烦,用上面的技术就可以避免引用。假设所有的业务窗口都从TAppBasicForm继承,你可以声明这样的类型:
TTAppBasicFormClass = class of TTAppBasicForm;
然后在每个业务窗口代码结尾处加上:
initialization
RegisterClass(TBusMemberNewForm); //TBusMemberNewForm从TAppBasicForm继承
finalization
UnRegisterClass(TBusMemberNewForm);
最后在Mainform用下面的函数: procedure TTMainForm.ShowForm(sFormClass: string); var AppFormClass: TTAppBasicFormClass; begin try AppFormClass := TTAppBasicFormClass(FindClass(sFormClass)); with AppFormClass.Create(self) do begin Show; end; except ShowMessage('Class ‘+sFormClass+' not exist or not register!'); end; end; 这个函数的参数就是要打开的窗口类名 更进一步,因为项目中Menu的hint属性不会用到,可以用来存储要打开的类名,如下: procedure TTMainForm.MainFormMenuClick(Sender: TObject); var sFormName: string; begin with sender as TMenuItem do begin sFormName := Trim(Hint); if sFormName<>'' then ShowForm(sFormName); end; end; procedure TTMainFaceForm.SetMenuAction; var i: integer; begin for i:=0 to ComponentCount-1 do begin if Components[i] is TMenuItem then begin with Components[i] as TMenuItem do if Trim(Hint)<>'' then OnClick := MainFormMenuClick; end; end; end; 这样的话每增加一个菜单,只要指定菜单的hint属性就自动实现打开对应业务的功能,避免引用单元,也不用写菜单的onclick代码,非常简洁。当然这个还用到了RegisterClass和FindClass的技术,去看帮助就明白了。
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/6364993.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人