我定义了一个过程,试图通过传递两个参数(1,窗体名称,2,数据集名称)对该窗体对象下的数据集执行一些操作,譬如关闭后重新打开之类的;
写法如下:procedure LXOpenDataset(AFormName,AAdoQueryName: string);
begin
with TForm(FindClass(AFormName)) do //1
begin
TAdoQuery(FindComponent(AAdoqueryName)).close;
TAdoQuery(FindComponent(AAdoqueryName)).Open;
end;
end;注释一处有点疑问,因为要执行这种操作的窗体未必是直接从Tform中继承过来的;
这点暂且不说;
一个很头大的问题就是FindClass函数的参数要求必须是在系统初始化的时候用registerClass函数定义过的;
所以程序根本无法编译;
哪位兄弟做过的帮帮忙!
写法如下:procedure LXOpenDataset(AFormName,AAdoQueryName: string);
begin
with TForm(FindClass(AFormName)) do //1
begin
TAdoQuery(FindComponent(AAdoqueryName)).close;
TAdoQuery(FindComponent(AAdoqueryName)).Open;
end;
end;注释一处有点疑问,因为要执行这种操作的窗体未必是直接从Tform中继承过来的;
这点暂且不说;
一个很头大的问题就是FindClass函数的参数要求必须是在系统初始化的时候用registerClass函数定义过的;
所以程序根本无法编译;
哪位兄弟做过的帮帮忙!
----------------------
那就用registerClass函数定义不就行了?unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var FormClass: TFormClass; frm:Tform;
begin
FormClass:=TFormClass(GetClass('Tform2'));
if FormClass=nil then exit;
Application.CreateForm(FormClass,Frm);
Tform(frm).show;
TEdit(Tform(frm).FindComponent('edit1')).Text:='aaa';
end;
initialization
RegisterClass(Tform2);
end.
1: 现在的系统里窗体的注册方式不是用RegisterClass,我如果去动整个窗体的框架会很难做;
2:就算是动了;那如果Form2不是直接从TForm中继承的又该怎么做;还用Tform()强行转换吗?
3:还有一个问题是,如果Form2窗体已经生成过了又该怎么处理?
3.如果已经生成过了就直接show
2.看定义:frm:Tform;
3.如果已经生成过了就直接show
----------------------------------------------------
老大;
如果直接show的话Frm怎么得到?
那他的继承关系是什么呢???
如果是上面所示的继承结构;
在TFormBase的实例和TFormPBase类的实例中都需要调用该过程;
怎么处理?