超郁闷,真困惑.....请各位帮忙解决......谢谢...//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;请问如何解决呢?万分感谢!!!!!!!!
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;请问如何解决呢?万分感谢!!!!!!!!
解决方案 »
- 有人用过风云压力测试吗,这个东西挺贵的,要2000多块,是真的,还是假的
- 关于拆分和循环比较的问题
- delhpi 怎么打开 我的电脑--属性---远程---允许用户远程连接到此计算机
- 关于文件的写入??在线等。
- 用什么方法删除纪录最好?
- 关于在Windows 2003 Server打开IE窗口的问题
- 自己一个人开发C/S系统,今天终于完成并调试完成,高兴,散分(最多只能放100分)
- 如何用SQL格式化一个IP地址?我得到的IP地址是一串数字,想显示为255.255.255.255那样的样子。
- =====请问Delphi怎样调用Word打开一个文件?=====
- 开始运行时怎样使子窗体不显示?怎样关闭子窗体?
- 复制表结构
- 请CDSoftwareWj大哥把你的头像换了吧。
这个Form2是全局变量(可能叫实例准确一些)2、aform:=myformclass.Create(Application);
这个aform是TForm1.ClickOpenForm方法中定义的局部变量看出来了吧,这两个并不是一回事,此Form非彼Form,所以当然没反应
用Self,Self也可省略
他只创建一个TFORM2类的一个实例,叫aform. 并没有FORM2这个实例不有一点,亮剑兄说的,应该就是全局的问题了. 如果把aform:TForm;放到全局那里,是可以的
但TFORM2里的事件是则要改成 (AForm as TForm2).Edit1.Text:= 'Hello';
如果改成 (AForm as TForm2).Edit1.Text:= 'Hello'; 都知道是要 as TForm2 了,那当时还用字符串创建干嘛哩?
你的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;
问题1:我看你是自己把你自己搞晕了, 你不对TFORM2的实例操作,你对什么操作吖?? 你本意是对什么操作?? 还反过来问,晕了....
问题2:看过 TEDIT(xxx).xxx了吧. 竟然你都还能找类了,那为什么不能用这个类来强制转换吖??
问题3:看样子,你是想通用字符来操作吧,那么,当你找到字符对应的类后,但是你的程序里又写死了某类的某控件的TEXT:='HELLO'. 你怎么知道这个类里的这个控件吖,就算有,你怎么知道有这个控件就叫这个名吖.唉~ 不说了.
ShowModal出那个Form叫aform,是定义在TForm1.ClickOpenForm方法中的局部变量
而Form2如果你没有删掉IDE默认加上的,则是TForm2所在单元的全局变量简而言之,就是搞错对象了
对象(也称为实例)名只在代码中是有意义的,是给程序员看的
执行时计算机是不认名字的,对象都是内存地址
var
myformclass:TFormClass;
aform:TForm;
begin
myformclass:=TFormClass(FindClass(formname));
aform:=Tform(TFormClass(FindClass(formname)));if myformclass <> nil then
begin
aform:=myformclass.Create(nil);
try
aform.ShowModal;
finally
aform.Free;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ClickOpenForm('Tform2'); //将想要ShowModal的窗体名称传给自定义过程
end;initialization
RegisterClass(Tform2);
finalization
UnRegisterClass(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'; 也是不行的....
//更改为,因为Form2是变量。类中不要设计用变量的名称
self.Edit1.Text:='hello';end;
例如:
procedure TForm_Apply_Money_To_OA.FormCreate(Sender: TObject);
begin
Form_Apply_Money_To_OA:=Self;
end;
这样之后,就没有任何问题了