表格上有一个按钮
按钮名称为bmod2
,而表单名称为fLayOut1
当用户点击按钮时,我想保存当前表单和按钮名称的名称
procedure TFLayout1.bMod2Click(Sender: TObject);
var
azone : string;
adept : string;
begin
azone := //forum name here
adept := //button name here
end;
答案 0 :(得分:5)
要获取事件方法所属的当前表单的名称,您可以直接或通过隐藏 Self
对象访问Name
属性,如下所示。注释下面的代码行。
要获取已触发某个事件的组件的名称,在本例中为OnClick
事件,您可以使用常用的Sender
参数,该参数(通常)是对象的引用,导致事件发生。由于传递的Sender
参数是基类TObject
类类型,但尚未具有Name
属性,因此您需要将此对象类型转换为类型{{3}属性有。它可能直接是一个具有绑定事件的对象的类型,或者,如果您不确定它,或者可能有更多组件类型绑定到事件,您可以使用例如Name
属性定义的公共TComponent
祖先类(如以下代码中的注释行所示):
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;
答案 1 :(得分:1)
如果您想要按钮的父级名称,上面的代码会为您执行此操作,但如果您确实需要包含按钮的表单名称(可能该按钮位于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;
答案 2 :(得分:0)
由于您不构建复合组件,您可以 使用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总是使表单成为所有控件的所有者,而不是它们的直接容器(它是它们的父级)。