假设我想在我创建的单元中创建一个过程,该单元按名称显示和隐藏表单(作为参数传递)。
我怎么能这样做,语法是什么?
感谢。
修改
我正在寻找类似的东西:Popup(FormMy,'Show');从我的单位内部。
答案 0 :(得分:0)
假设表单是以父表单作为所有者[.Create(Self)]创建的,这应该有效:
procedure ShowFormByName(const ParentForm: TForm; const FormName: String; ShowForm: Boolean);
var
i: Integer;
begin
for i := 0 to pred(ParentForm.ComponentCount) do
begin
if (ParentForm.Components[i] is TForm) and ParentForm.Components[i].Name = FormName) then
begin
if ShowForm then
TForm(ParentForm.Components[i]).Show
else
TForm(ParentForm.Components[i]).Hide;
Break;
end;
end;
end;
答案 1 :(得分:0)
您可以循环遍历全局Screen对象的CustomForms属性(它们有CustomFormCount)。这只是列举了应用程序中可能是您想要的所有VCL表单。
如果您正在寻找代码,它将是这样的:
for i := 0 to Screen.CustomFormCount-1 do begin
Form := Screen.CustomForms[i];
if Form.Name=TargetName then begin
DoSomething(Form);
break;
end;
end;
答案 2 :(得分:0)
你可以写一个像这样的程序
procedure ShowMyForm(Form: TForm; Show: Boolean);
begin
if Show then
Form.Visible := True
else
Form.Visible := False;
end;
并通过ShowMyForm(MyForm, True);
致电您的表单,并确保您的单位uses Forms
大卫说你可以成功
procedure ShowMyForm(Form: TForm; Show: Boolean);
begin
Form.Visible := Show
end;
答案 3 :(得分:0)
function GetFormByName(const FormName: string): TForm;
var
i : Integer;
begin
Result := nil;
for i := 0 to Screen.FormCount - 1 do
begin
if SameText(Screen.Forms[i].Name,FormName) then
begin
Result := Screen.Forms[i];
Break;
end;
end;
end;