0

我想创建一个过程,它返回分配对象的表单的名称。例如:

我有一个 TPanel,在 TPanel 内有一个 TButton。我将作为参数传递给 TButton 的函数名称,并希望该函数返回我这个按钮在哪里的formuário 名称。

怎么做?

乐:

function TForm1.DoSomething(Obj: TComponent): String; 
var AClass : String; I : Integer; 
begin 
 AClass := TComponent(Obj).Owner.ClassName; 
 if (AClass = 'TForm') then 
  Result := TComponent(Obj).Name 
else 
 Result := TComponent(Obj).Owner.Name; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
 NomeForm := DoSomething(Button3); 
 ShowMessage(NomeForm); 
end; 

procedure TForm1.Button4Click(Sender: TObject); 
begin 
 NomeForm := DoSomething(Form1); 
 ShowMessage(NomeForm); 
end; 
4

2 回答 2

1

在我看来,GetParentForm在 unit 中声明的过程可以满足Forms您的要求。看一眼

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Forms_GetParentForm.html

于 2013-12-16T19:37:05.400 回答
1

这是您提到的相同条件下的一个简单示例。面板上的一个按钮,返回表单的名称。函数 ReturnForm,将递归运行,直到找到表单

function TForm22.ReturnForm(aParent: TWinControl): TWinControl;
begin
  Result:= nil;
  if aParent <> nil then
  begin
    if aParent.Parent <> nil then
      Result:= ReturnForm(aParent.Parent)
    else
      Result:= aParent;
  end;
end;

procedure TForm22.Button1Click(Sender: TObject);
begin
  Showmessage(ReturnForm(Button1).Name);
end;

小心从葡萄牙语到英语的翻译:)

于 2013-12-16T17:40:18.097 回答