上次我是这样说的:
两个窗体Form1和Form2,他们都有一个button可以调用同一个窗体Form3,
请问,在Form3的onshow事件中,我如何得到Form3的父窗体是Form1呢还是Form2?
解决立即给分,搜索了一下没发现匹配的。但其实怪我自己没有说清楚,应该是这样的:
工程中,只有Form1是刚开始就创建的,Form1上有两个button,分别可以动态创建Form2和Form3,
而Form2和Form3中分别有一个button,Form2和Form3中的button事件都是动态创建Form4,现在我想要在Form4中依据不同的情况(不同情况指从Form2过来的还是从Form3过来的),在Form4的onshow事件中实现针对其不同父窗体(不知道可以这样称呼它们不)的不同的功能。除了Form1的borderstyle为bsSizeable之外,其余窗体的borderstyle均为bsDialog。
button动态创建窗体的代码格式为:
if not Assigned(Form2) then Application.CreateForm(TForm2,Form2);
Form2.ShowModal;谢谢!
刚才那贴由于我的问题没有问清楚,
而各位的帮忙已经实现我当时问的问题,
所以先结贴,
重新开一个重新问。
解决立即给分。
两个窗体Form1和Form2,他们都有一个button可以调用同一个窗体Form3,
请问,在Form3的onshow事件中,我如何得到Form3的父窗体是Form1呢还是Form2?
解决立即给分,搜索了一下没发现匹配的。但其实怪我自己没有说清楚,应该是这样的:
工程中,只有Form1是刚开始就创建的,Form1上有两个button,分别可以动态创建Form2和Form3,
而Form2和Form3中分别有一个button,Form2和Form3中的button事件都是动态创建Form4,现在我想要在Form4中依据不同的情况(不同情况指从Form2过来的还是从Form3过来的),在Form4的onshow事件中实现针对其不同父窗体(不知道可以这样称呼它们不)的不同的功能。除了Form1的borderstyle为bsSizeable之外,其余窗体的borderstyle均为bsDialog。
button动态创建窗体的代码格式为:
if not Assigned(Form2) then Application.CreateForm(TForm2,Form2);
Form2.ShowModal;谢谢!
刚才那贴由于我的问题没有问清楚,
而各位的帮忙已经实现我当时问的问题,
所以先结贴,
重新开一个重新问。
解决立即给分。
if not Assigned(Form2) then Application.CreateForm(TForm2,Form2);
form2.myCreate = 'A'..
Form2.ShowModal;
Application.CreateForm(TForm2,Form2);
form2.Parent := form3;
Form2.ShowModal;
既然你在form2中,动态创建form4 ,那你就可以把相应的动作写上啊
begin
if (Parent = form3) then
begin end;
if (Parent = form2) then
begin end;
end;
我在Form4的onshow事件中要依据父窗体的不同来做不同的处理的啊。
如果使用上面说的form2.parent := form3的话,就会出Cannot focus a disabled or invisible window.的错误的。
所以就会出我上面说的Cannot focus a disabled or invisible window.的错误啊。
begin
if (Parent = form3) then
begin end;
if (Parent = form2) then
begin end;
end;
问题是你们说的方法中
Form4中不能有button之类的东西啊
有的话就会出上面的错误
如果没有的话什么错误都没有
private
CallForm: String然后在
procedure TForm3.Button1Click(Sender: TObject);
begin
if not Assigned(Form4) then
Application.CreateForm(TForm2,Form2);
form4.CallForm:= 'form3';
Form4.ShowModal;
end;procedure TForm2.Button1Click(Sender: TObject);
begin
if not Assigned(Form4) then
Application.CreateForm(TForm2,Form2);
form4.CallForm:= 'form2';
Form4.ShowModal;
end;
最后
procedure TForm4.FormShow(Sender: TObject);
begin
if (CallForm = 'form3') then
begin end;
if (CallForm = 'form2') then
begin end;
end;
public
CallForm: String
if Form4.Owner = Form2 then
...
else if Form4.Owner = Form3 then
...
试试看,或者:
if Form4.Owner.Name = 'Form2' then
...
else if Form4.Owner.Name = 'Form3' then
...