打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用字符串做为窗体名传参ShowModal窗体引发的后续问题(急!!!)

用字符串做为窗体名传参ShowModal窗体引发的后续问题(急!!!)

2010-01-16 18:49:33 来自:wenxia 浏览数:91
超郁闷,真困惑.....请各位帮忙解决......谢谢...
 //form1的代码
uses Unit2;
 {$R *.dfm}
procedure TForm1.ClickOpenForm(formname:string);
//自定义的用字符串打开form的过程
 var
myformclass:TFormClass;
aform:TForm;
begin
myformclass:=TFormClass(FindClass(formname));
 aform:=Tform(TFormClass(FindClass(formname)));
 if GetClass(TFormClass.ClassName)<>nil then
 begin
aform:=myformclass.Create(Application);
 try
aform.ShowModal;
 finally
aform.Free;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
 begin
ClickOpenForm('Tform2');
//将想要ShowModal的窗体名称传给自定义过程
end;

 initialization
 RegisterClass(Tform2);
end.
//form2的代码
procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.Edit1.Text:='hello';
 //这样给edit1.text赋值,没反应.

//Self.Edit1.Text:='hello';
//这样给edit1.text赋值,可以.

//Edit1.Text:='hello';
//这样给edit1.text赋值,也没问题.
//在form2内需要打开窗体form3 在form3内的button1的click事件内写代码
Form2.Edit1.Text:='hello'; 也是不行的....
end;
请问如何解决呢?万分感谢!!!!!!!!
 
myd2009回复于16日19点01分 
用最简单,最直接的代码实现自己想要的功能才是最重要的。。。
 
周一晚上回复于16日19点14分 
那你不会在建FORM3时传指针吖
 
有个快乐女儿回复于16日19点28分 
找到最简单的解决办法了。。。。在每个窗体的建体时执行一下窗体名:=self.
例如:
procedure TForm_Apply_Money_To_OA.FormCreate(Sender: TObject);
begin
  Form_Apply_Money_To_OA:=Self;
end;
这样之后,就没有任何问题了。。。
 
littlestar回复于16日19点42分 

真有创意。。。。直接换成self就行了
 
绿光宝贝回复于16日19点54分 
上面的人不是解释原因了?
你的form2根本没有指向TForm2的实例

你可以定义一个基类窗,里面定义一个虚方法
procedure AssignObject(aObj : TObject); virtual;
子类窗 override AssignObject
begin
  子类窗变量:= aObj;
end;
然后创建时:
procedure TForm1.ClickOpenForm(formname:string);  自定义的用字符串打开form的过程
var
myformclass:TMyFormClass;
aform:TForm;
begin
  myformclass:=TMyFormClass(FindClass(formname));
  aform:=Tform(TMyFormClass(FindClass(formname)));
  if GetClass(TMyFormClass.ClassName) <>nil then
    begin
      aform:=myformclass.Create(Application);
    aform.AssignObject(aForm)
      try
        aform.ShowModal;
      finally
        aform.Free;
      end;
    end;
end;


 
刘杰瑞回复于16日22点35分 
if Assigned(Form2) then Form2.Edit1.Text:='hello'; 这样你就知道了,你没实例,怎么去操作..
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Delphi中一些DLL的运用。
通用窗口创建代码
form表单 自动提交
如何控制其他程序窗体上的窗口控件:上
调出DLL中的窗体一
Android 的回車鍵困擾
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服