フォームにボタンがあります。
ボタン名は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 は常にフォームをすべてのコントロールの所有者にしますが、直接のコンテナー (親) にはしません。