原创。通过窗体的类名(字符串)的情况下,创建一个该窗体实列
有朋友和我讨论过,已经知道一个类名,怎么才能创建一个实列。一个偶然的机会发现很好做。
用Tform来做个试验吧。
1、新建工程,主form为form1,保存为unit1,添加一个form2,保存为unit2。
2、 在unit2中TForm2 = class(TForm)前面加上
TmyForm = class of Tform2;//相当于给Tform2加上一个别名
3、 在form1的FormCreate中写入RegisterClasses([TForm2]);//注册Tform2类
4、 在form1的button的单击事件中加入
var
A : Tform ;
begin
if GetClass('TForm2') =nil then exit ;
a := TMyform(GetClass('TForm2')).Create(nil);
a.show;
end;
搞定!
当然很多情况下,大家不会这样做。不过也可以试验一下。
比如,我有很多地方都需要调用各种的参数配置对话框,然而,我想偷懒,不想写太多的代码。我就可以通过发自定义消息的办法。先将所有的对话框类名写入一个数组中去。在需要调用的参数配置对话框的时候,发一个消息。接收消息的模块,就通过他发送过来的值,比如是一个int类型的id,我可以根据这个id在数组中找到类名,然后用上面的方法就可以搞定了。当然就节约了很多的代码了。
-----------------
欢迎讨论