if Application.FindComponent('FormXXXX')=nil then Application.CreateForm(TFormXXXX,FormXXXX); FormXXXX.Show;
if Assigned(窗体实例) then 存在
Assigned 窗体释放后重新Create出现异常
var AForm2:TForm2;procedure TForm1.Button1Click(Sender: TObject); begin if Assigned(AForm2)then ShowMessage('存在') else ShowMessage('不存在!'); end;procedure TForm1.Button2Click(Sender: TObject); begin AForm2:=TForm2.Create(Self); AForm2.Show; end;procedure TForm1.Button3Click(Sender: TObject); begin AForm2.Release; end;我的程序是社么写的:第一个按键是测试是否存在,第二个按钮创建窗口,第三个销毁。 程序运行后,直接点第一个按键,出现“不存在”,当创建后,再点,出现“存在”。当点第三个把窗口Release后,点第一个还是出现“存在”,请问这是怎么加速,请指点下。
button1 中這樣寫。if Assigned(Application.FindComponent('AForm2')) then ShowMessage('存在') else ShowMessage('不存在!');
用你的方法: var Aform2:TForm2;procedure TForm1.Button1Click(Sender: TObject); begin Aform2:=Tform2.Create(Self); Aform2.Show; end;procedure TForm1.Button2Click(Sender: TObject); begin if Application.FindComponent('AForm2')=nil then ShowMessage('does not exist!') else ShowMessage('Exist');end;无论是创建还没有创建都没有检测到窗体,是我写得不对吗?
procedure TForm1.Button1Click(Sender: TObject); begin form2:=Tform2.Create(Self); form2.Show; end;procedure TForm1.Button2Click(Sender: TObject); begin if Application.FindComponent('Form2')=nil then ShowMessage('does not exist!') else ShowMessage('Exist'); end;我测试没问题啊
if Application.FindComponent('Form2')=nil then Application.CreateForm(TForm2,Form2); Form2.Show;这样不可以么?
if Assigned(Application.FindComponent('Form2')) then ShowMessage('存在') else ShowMessage('不存在!'); 那是因為你又自己聲明了一個TFORM2的變量子 Aform2 , 你看下你的 Tform2 的NAME是什麼,相對應的你的 FindComponet 也應該找哪一個NAME
不管是否创建,都是“dose not exist"。 我把第二个窗体在Project的选项里从AutoCreate移到Available里了。和这有着么吗?
procedure TForm1.Button1Click(Sender: TObject); begin form2:=Tform2.Create(Self); form2.Show; end;你这样form2的所有者是form1 //此时的Self是form1 Application.FindComponent当然是找不到了
if MyForm<> nil then MyForm.Show else MyForm ;= TMyForm.Create(nil); //MyForm为全局变量
再补充一点,在MyForm的析构事件中把MyForm置空了。
constructor TComponent.Create(AOwner: TComponent); begin FComponentStyle := [csInheritable]; if AOwner <> nil then AOwner.InsertComponent(Self); end; 好好理解下這個意思
//指定窗口是否存在,存在,则将其置前并返回真 function Tfrm_main.checkFromExist(TypeName : TClass): bool; var I:integer; begin for I := 0 to self.MDIChildCount - 1 do begin if self.MDIChildren[i].ClassType=TypeName then begin result:=true; if self.MDIChildren[i].WindowState=wsMinimized then MDIChildren[i].WindowState:= wsMaximized; MDIChildren[i].BringToFront; exit; end; end; result:=false; end;
Application.CreateForm(TFormXXXX,FormXXXX);
FormXXXX.Show;
存在
AForm2:TForm2;procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned(AForm2)then
ShowMessage('存在')
else
ShowMessage('不存在!');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
AForm2:=TForm2.Create(Self);
AForm2.Show;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
AForm2.Release;
end;我的程序是社么写的:第一个按键是测试是否存在,第二个按钮创建窗口,第三个销毁。
程序运行后,直接点第一个按键,出现“不存在”,当创建后,再点,出现“存在”。当点第三个把窗口Release后,点第一个还是出现“存在”,请问这是怎么加速,请指点下。
button1 中這樣寫。if Assigned(Application.FindComponent('AForm2')) then ShowMessage('存在') else
ShowMessage('不存在!');
var
Aform2:TForm2;procedure TForm1.Button1Click(Sender: TObject);
begin
Aform2:=Tform2.Create(Self);
Aform2.Show;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if Application.FindComponent('AForm2')=nil then
ShowMessage('does not exist!')
else
ShowMessage('Exist');end;无论是创建还没有创建都没有检测到窗体,是我写得不对吗?
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=Tform2.Create(Self);
form2.Show;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
if Application.FindComponent('Form2')=nil then
ShowMessage('does not exist!')
else
ShowMessage('Exist');
end;我测试没问题啊
if Application.FindComponent('Form2')=nil then
Application.CreateForm(TForm2,Form2);
Form2.Show;这样不可以么?
ShowMessage('不存在!'); 那是因為你又自己聲明了一個TFORM2的變量子 Aform2 , 你看下你的 Tform2 的NAME是什麼,相對應的你的 FindComponet 也應該找哪一個NAME
不管是否创建,都是“dose not exist"。
我把第二个窗体在Project的选项里从AutoCreate移到Available里了。和这有着么吗?
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=Tform2.Create(Self);
form2.Show;
end;你这样form2的所有者是form1 //此时的Self是form1
Application.FindComponent当然是找不到了
MyForm.Show
else
MyForm ;= TMyForm.Create(nil);
//MyForm为全局变量
begin
FComponentStyle := [csInheritable];
if AOwner <> nil then AOwner.InsertComponent(Self);
end; 好好理解下這個意思
function Tfrm_main.checkFromExist(TypeName : TClass): bool;
var
I:integer;
begin
for I := 0 to self.MDIChildCount - 1 do
begin
if self.MDIChildren[i].ClassType=TypeName then
begin
result:=true;
if self.MDIChildren[i].WindowState=wsMinimized then MDIChildren[i].WindowState:= wsMaximized;
MDIChildren[i].BringToFront;
exit;
end;
end;
result:=false;
end;
AForm2:TForm2;里的Afomr2是一个指针,判断这个指针是否为空?
MyForm := nil;//MyForm为全局变量判断窗口是否存在只需要判断MyForm = nil是否为假即可。
if MyForm <> nil then
MyForm.Show
else
MyForm := TMyForm.Create(nil);