我在表格上有一個按鈕。
的按鈕名稱爲bmod2
,而表格名稱是fLayOut1
獲取當前表格的名稱
當用戶點擊該按鈕,我想保存當前表單和按鈕名稱的名稱
procedure TFLayout1.bMod2Click(Sender: TObject);
var
azone : string;
adept : string;
begin
azone := //forum name here
adept := //button name here
end;
我在表格上有一個按鈕。
的按鈕名稱爲bmod2
,而表格名稱是fLayOut1
獲取當前表格的名稱
當用戶點擊該按鈕,我想保存當前表單和按鈕名稱的名稱
procedure TFLayout1.bMod2Click(Sender: TObject);
var
azone : string;
adept : string;
begin
azone := //forum name here
adept := //button name here
end;
要獲取的名稱事件方法所屬的當前表單,您可以直接訪問Name
屬性,也可以通過隱藏的Self
對象訪問屬性,如下面代碼的註釋行中所示。
要獲取已觸發某個事件的組件的名稱(在本例中爲OnClick
事件),可以使用常用的Sender
參數(通常爲引用該對象的引用)導致該事件觸發。由於通過的Sender
參數的基類爲TObject
類類型,它尚未具有Name
屬性,因此您需要將此對象轉換爲類型,即Name
屬性。它可能直接是綁定事件的對象的一種類型,或者如果您不確定該事件,或者綁定到事件的組件類型可能更多,則可以使用例如共同TComponent
祖先類,其中Name
屬性定義(因爲它顯示在註釋行下面的代碼):
procedure TFLayout1.bMod2Click(Sender: TObject);
var
azone: string;
adept: string;
begin
azone := Name;
// azone := Self.Name;
adept := TButton(Sender).Name;
// adept := TComponent(Sender).Name;
ShowMessage('Form name: ' + azone + sLineBreak +
'Sender name: ' + adept);
end;
如果你想按鈕的父母的名字,上面的代碼爲你做,但如果你真想包含按鈕形式的名稱(也許該按鈕上的GroupBox或面板或等),你可以做這樣的:
var
ParentClass: TWinControl;
begin
ParentClass:= Button1.Parent;
while not (ParentClass is TForm) do
ParentClass := ParentClass.Parent;
ShowMessage(Button1.Name);
ShowMessage(ParentClass.Name);
end;
爲什麼上面的代碼會給出按鈕的父級名稱?它會給出你正在運行其類的代碼的任何對象的名稱。無論如何,當你需要獲取父表單時,你可以調用'GetParentForm'。 –
既然你不建設的複合材料部件,你可以也使用t的所有者他TButton。
procedure TFLayout1.bMod2Click(Sender: TObject);
var
azone: string;
adept: string;
btn: TButton;
begin
btn := (Sender as TButton);
adept := btn.Name;
// adept := TComponent(Sender).Name;
// adept := (Sender as TButton).Name;
azone := btn.Owner.Name;
ShowMessage('Form name: ' + azone + sLineBreak +
'Sender name: ' + adept);
end;
IDE始終將窗體設置爲所有控件的所有者,而不是它們的直接容器(它是它們的父級)。
@SertacAkyuz:確實...代碼已更正。 –
完美而快速! –
'Sender as TButton'在這裏會比較好,因爲如果'Sender'不是'TButton',它會引發運行時錯誤。 –
@David:發件人作爲TButton也會引發一個運行時異常,但是可以預見,並且每次發件人都不會是TButton。即使類型不對應於沒有RTE的TButton,類型轉換也可能通過。爲避免RTE,應使用is運算符 – pf1957