我在表单上有一个按钮。
按钮名称是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 或 Panel 等),您可以这样做:
var
ParentClass: TWinControl;
begin
ParentClass:= Button1.Parent;
while not (ParentClass is TForm) do
ParentClass := ParentClass.Parent;
ShowMessage(Button1.Name);
ShowMessage(ParentClass.Name);
end;
由于您不是在构建复合组件,因此您也可以使用 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 始终使表单成为所有控件的所有者,而不是它们的直接容器(它是它们的父级)。