2013-12-16 31 views
1

我想創建一個過程,返回分配對象的表單的名稱。例如:如何從Delphi中的對象中發現所有者?

我有一個TPanel和TPanel一個TButton。我將作爲參數傳遞給TButton的函數名稱,並希望函數返回formuário的名稱,此按鈕位於何處。

怎麼辦?

LE:

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; 
+0

組件名稱被強制爲跨越不同形式的所有者窗體的範圍內唯一的,但。可能會發生這樣的情況,即在應用程序的不同表單上有多個具有相同名稱的按鈕。 –

+0

如果對象沒有所有者,該怎麼辦?或者所有者不是表格? –

+1

這聽起來不像「所有權」是你所指的。這聽起來像你想要「父母」控制(或父母的父母不是表格)。 – Sam

回答

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; 

慎用翻譯從葡萄牙語到英語:)

相關問題