我想在创建Tform2时向用户显示一条消息。
我使用此代码,但效果不佳。
procedure TForm1.Button1Click(Sender: TObject);
var
a:TForm2;
begin
if a=nil then
begin
a := TForm2.Create(Self);
a.Show;
end
else
begin
showmessage('TForm2 is created');
end;
end;
最佳答案
那是因为您将a
声明为局部变量。每次您输入TForm1.Button1Click
时,即使可能仍然存在一个Form2,此变量将是全新的且未初始化。这意味着检查nil甚至不起作用。
您应该:
将a
设置为全局(例如,首次创建表单时所获得的Form2全局)
使a
成为Form1声明的一部分(您是主窗体?),或者是贯穿整个程序的其他类的数据模块。
完全不要使用变量,但是请检查Screen.Forms
以查看是否有Form2。
[编辑]
像这样:
var
i: Integer;
begin
// Check
for i := 0 to Screen.FormCount - 1 do
begin
// Could use the 'is' operator too, but this checks the exact class instead
// of descendants as well. And opposed to ClassNameIs, it will force you
// to change the name here too if you decide to rename TForm2 to a more
// useful name.
if Screen.Forms[i].ClassType = TForm2 then
begin
ShowMessage('Form2 already exists');
Exit;
end;
end;
// Create and show.
TForm2.Create(Self).Show;
end;