我在表格上有一个按钮。
的按钮名称为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