我只知道子窗体的名称为:"form2"(字符串形式),如何在form1中创建MDI子窗体form2 ( 积分: 50 )

M

miomio

Unregistered / Unconfirmed
GUEST, unregistred user!
我知道在FORM1中打开子窗体的代码
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=tform2.Create(self);
form2.Show;
{//或 application.CreateForm(tform2,form2);
end;
我也知道通过application.FindComponent('form2')可以得到form2的实例,
就是不知道通这个字符串"form2"如何用form1的按钮事件把这个子窗体form2显视出来
请高手多多指教!
 
我知道在FORM1中打开子窗体的代码
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=tform2.Create(self);
form2.Show;
{//或 application.CreateForm(tform2,form2);
end;
我也知道通过application.FindComponent('form2')可以得到form2的实例,
就是不知道通这个字符串"form2"如何用form1的按钮事件把这个子窗体form2显视出来
请高手多多指教!
 
var
form2:tform2;
begin
form2:=tform2.create(application);
form2.parent:=主窗体;
form2.show;
end;
 
你可能没有理解我的意思
我的问题中"form2"只是一个字符串,
取个例子:
var s:string;
begin

s:='form2';
//现在我要通过s的信息将form2显视出来
//如果不用mdi,我可以直接用
//Tform(application.FindComponent('form2')).Show;
end;
但是我就是不知道,用MDI时如何将s代表的form显视出来?
 
有没有人知道啊,告诉我好吗?
 
for I := 0 to MDIChildCount - 1do
if SameText(MDIChildren.Name, 'form2') then
begin
TForm(MDIChildren).Show;
Break;
end;
 
使用类工厂就可以达到你的目的
 
lichengbin:form2还没有Create();怎么就可以show了
TO:dlwzp, 怎么使用类工厂?
 
“取个例子:
var s:string;
begin

s:='form2';
//现在我要通过s的信息将form2显视出来
//如果不用mdi,我可以直接用
//Tform(application.FindComponent('form2')).Show;
end;
但是我就是不知道,用MDI时如何将s代表的form显视出来? ”
你真搞笑,你不是仅仅显示form2吗?
没有创建的话,你写的Tform(application.FindComponent('form2')).Show;能工作?还没有创建的话,你给个form2没有任何意义,可能创建TForm2的一个实例叫form2,也可能创建TForm3的一个实例也叫form2,那你随便给个form2的名称,老天知道你要创建哪个窗体呀?对象的名称与对象所属类的名称又没有说一定要有什么关系。
 
谢谢lichengbin
为了说明仔细一点,
现在我程序中所有Form的name属性都放在数据库表里,而且除了主窗体from1
的fsMDIForm属性设为fsMDIForm,其它form1,form2...等的属性的fsMDIForm属性都设为fsMDIChild,
当用户单击数据表里的一条记录,系统将从记录里读取这个name值,
假设,这个name值已经提取出来了,为字符类型s='form2'
我该如何根据s的值写代码,将s所表示的form2显视出来!
 
var s:string;
begin

s:='form2';//是一个FORM,在表中读取,已string格式,
//如何SHOW这个FORM???
end;
 
to TIMMY:
------------------------
var s:string;
begin

s:='form2';//是一个FORM,在表中读取,已string格式,
tform(application.FindComponent(s)).Show;//显视FORM2
end;
 
{MDI窗体方法;}
procedure TForm1.ShowChild(Sender: TObject);
function FindMDIChild(FormName: String): Integer;
var
i: Integer;
begin
Result := -1;
for i := 0 to MDICHildCount - 1do
if MDIChildren.Name = FormName then
begin
Result := i;
Break;
end;
end;

var
i: Integer;
begin
i := -1;
//这里动态创建窗体
if TMenuItem(Sender).Caption = 'FormA' then
begin
i := FindMDIChild('FormA');
if i = -1 then
begin
Form2 := TForm2.Create(Self);
Form2.Name := 'FormA';
Form2.Caption := 'FormA';
Form2.Show;
end
else
begin
MDIChildren.Show;
end;
end;

if TMenuItem(Sender).Caption = 'FormB' then
begin
i := FindMDIChild('FormB');
if i = -1 then
begin
Form2 := TForm2.Create(Self);
Form2.Name := 'FormB';
Form2.Caption := 'FormB';
Form2.Show;
end
else
begin
MDIChildren.Show;
end;
end;
end;
 
看这个帖子,已经很好的解决了这个问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3142439
 

Similar threads

I
回复
0
查看
500
import
I
I
回复
0
查看
755
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
716
import
I
顶部