DLL文件里面有两个窗体,一个浏览窗体MainForm,一个添加窗体AddForm,AddForm如何调用MainForm上的过程???(10分)

  • 主题发起人 主题发起人 文生
  • 开始时间 开始时间

文生

Unregistered / Unconfirmed
GUEST, unregistred user!
DLL文件里面有两个窗体,一个浏览窗体MainForm,
有ADOQuery,DataSous,DBGrid,
一个添加按钮,

一个添加窗体AddForm,点MainForm窗体上的"添加"时showmodule出 AddForm,窗体.

AddForm 窗体如何调用MainForm窗体上的过程?

procedure TFrm_Main.pubEdtUser;
begin

ADOQ_User.Edit;
ADOQ_User.FieldByName('XNAME').AsString:=trim(Frm_XT_Add.Edt_Name.Text);
ADOQ_User.FieldByName('LOGINID').AsString:=trim(Frm_XT_Add.Edt_ID.Text);
ADOQ_User.Post;
end;
 
不對吧,我在AddForm裡加上MainForm單元了,
 
1.循环调用说明你的架构有问题
2.如果一定要这样做,就在MainForm的interface部分Uses一下AddForm窗体
在AddForm的implementation部分Uses一下MainForm。而且保证在MainForm中的ADO等控件不是Private类型
 
定一个统一的窗口基类,
TPForm = class(TForm)
public
procedure pubEdtUser;
virtual;
end;


从窗口基类继承
TFrm_Main = class(TPForm)
public
procedure pubEdtUser;
override;

end;

// ....................
procedure TFrm_Main.pubEdtUser;
begin

ADOQ_User.Edit;
ADOQ_User.FieldByName('XNAME').AsString:=trim(Frm_XT_Add.Edt_Name.Text);
ADOQ_User.FieldByName('LOGINID').AsString:=trim(Frm_XT_Add.Edt_ID.Text);
ADOQ_User.Post;
end;



// AddForm如此定义
TAddForm = class(TForm)
private
PForm: TPForm;
public
constrcutor Create(aPForm: TPForm);

end;


.....

TAddForm.Create(aPForm: TPForm);

begin

PForm := aPForm;
// 在AddForm中就可以使用TFrm_Main的pubEdtUser函数了,如果还要调别的函数就在定义一些虚拟函数,下面继承就行了
end;



// 创建AddForm时把TFrm_Main传给它

TAddForm.Create(TFrm_Main);
 
接受答案了.
 
后退
顶部