想把某个窗体名 传递到一个函数,在这个函数中 怎么引用这个窗体上的对象呢,如EDIT(100)

  • 主题发起人 主题发起人 vlaomao
  • 开始时间 开始时间
V

vlaomao

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure addQL(frmname:string);being引用frmname对象上的EDIT??end;其中FRMNAME窗体已经创建过了。如frm_demo ,在函数中写frm_demo.edit1是可以的。但是我想通过传frm_demo到这个函数?在这个函数中怎么引用呢?
 
如果你的函数已经知道这个窗体的类名,则可通过传句柄的方式实现,例如procedure addQL(frmHandle:THandle);being Tfrm_demo(FindControl(frmHandle)).Edit1 ...end;调用时, addQL(frm_demo.Handle);
 
楼上的,Tfrm_demo(FindControl(frmHandle)).Edit1 ... 中的tfrm_demo 是可变的。有很多很多窗体,我就是想通过传某个窗体名字啊。
 
function TForm1.FindForm(FormName,FormCaption: string): TForm; var FindForm:TForm; FindFormClass:TFormClass; classname:string;//窗体类名 begin FindForm:=tform(FormName); classname:='T'+formname; FindFormClass:=TFormClass(Findclass(classname)); if FindFormClass<>nil then begin application.Createform(FindFormClass,FindForm); FindForm.Caption:=FormCaption; result:=FindForm; end; end;procedure TForm1.btn1Click(Sender: TObject);var T1:TForm;begin t1:=FindForm('form2','测试') // 这里我想引用 ForM2上的 EDIT;end; initialization RegisterClass(TForm2); finalization UnRegisterClass(TForm2);end.
 
富翁们帮忙啊。
 
高手帮忙
 
procedure TForm1.btn1Click(Sender: TObject);var T1:TForm;begin t1:=FindForm('form2','测试') // 这里我想引用 ForM2上的 EDIT; if T1 is TForm2 then begin TForm2(T1).edit..... end;end;
 
谢谢楼上的,有没有更好一点的方法呢?
 
不用这么复杂,还是传handleprocedure addQL(frmHandle:THandle);var tmpForm: TForm;being tmpForm := TForm( FindControl( frmHandle ) ); ShowMessage( ( tmpForm.FindComponent('Edit1') as TEdit ).Text );end; 以上代码未加保护
 
你的目的是要查询Form上的控件,函数的定义和返回值需要改一下...implementationuses Unit2;{$R *.dfm}function TForm1.FindForm(FormName,FormCaption, ControlName:string):TWinControl;var FindForm:TForm; FindFormClass:TFormClass; classname:string;//窗体类名 i:integer;begin result:=nil; FindForm:=tform(FormName); classname:='T'+formname; if Findclass(classname)=nil then exit; FindFormClass:=TFormClass(Findclass(classname)); if FindFormClass<>nil then begin application.Createform(FindFormClass,FindForm); FindForm.Caption:=FormCaption; FindForm.Show; for i:=0 to FindForm.ControlCount-1 do if FindForm.Controls.Name=ControlName then result:=TWinControl(FindForm.Controls); end;end;procedure TForm1.Button1Click(Sender: TObject);begin //这里没有考虑FindForm的返回值为nil的情况 TEdit(FindForm('Form2','AAA','Edit1')).Text:='TEST'; TButton(FindForm('Form2','AAA','Button1')).Caption:='TEST';end;initialization RegisterClass(TForm2);finalization UnRegisterClass(TForm2);
 
谢谢各位。
 
后退
顶部