获取当前表单的名称

时间:2013-01-20 11:30:48

标签: forms delphi delphi-xe2

表格上有一个按钮 按钮名称为bmod2,而表单名称为fLayOut1

当用户点击按钮时,我想保存当前表单和按钮名称的名称

procedure TFLayout1.bMod2Click(Sender: TObject);
var
azone : string;
adept : string;
begin
azone := //forum name here
adept := //button name here
end;

3 个答案:

答案 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总是使表单成为所有控件的所有者,而不是它们的直接容器(它是它们的父级)。