1

フレーム コードからフレームのオーナー フォームのクラスタイプを取得し、そのタイプを TFormClass に変換するにはどうすればよいですか。フォーム クラスを登録する必要があることはわかっているので、GetClassで取得できますが、そこで行き詰まります。

4

1 に答える 1

7

ホスト フォームのクラス型は次のように取得されます。

HostFormClassType := TFormClass(GetParentForm(Self).ClassType);

ここで私が書くとき、私はSelfそれをあなたのフレームと見なします。「所有者」とおっしゃいましたが、本当の意味はフレームが存在するフォームだと思います。これは通常、フレームの所有者と同じですが、常にそうとは限りません。

何も登録したり、呼び出したりする必要はありませんGetClass

これに関する唯一のわずかな問題は、ではなくGetParentFormから派生したものを返す可能性があることです。したがって、上記のコードのキャストは正しくない可能性があります。ランタイム テストを含めることで、これに対処できます。TCustomFormTForm

var
  ClassType: TClass;
....
ClassType := GetParentForm(Self).ClassType;
Assert(ClassType.InheritsFrom(TForm));
HostFormClassType := TFormClass(ClassType);
于 2013-03-20T12:23:28.460 に答える