Form1で作成した関数をForm2でも使用したいのですがその関数を呼び出すにはどうすればよいのでしょうか?全く基礎的なような質問ですみません。
Form2のpublicにMessageBoxなるメソッドを作成したとして
type
TForm2 = class(TForm)
〜省略〜
public
procedure MessageBox;
end;
procedure TForm2.MessageBox;
begin
ShowMessage('Form2 のメッセージ');
end;
Form1では以下のように使用します。
procedure Test;
var
F : TForm2;
begin
F := TForm2.create(nil);
try
F.MessageBox; // ← ここでForm2のメソッドをつかってる
finally
FreeAndNil(F);
end;
end;
※必要最小限のコードしか書いてないのでわからなければ言ってください。
関数との事なので
procedure MessageBox;
を関数にすれば他と同じように使えます。
class functionとかするといちいちCreateしないので便利に使えます。
function MessageBox;
> Form1で作成した関数をForm2でも使用したいのですが
回答が逆なんでは?
既に解答があったみたいですが(汗)
TForm2からTForm1のメソッドを呼び出すにはどうすればいいか…という事だと思うんですが…。
(TForm1 の privateとかpublicに書いてある関数のことですよね?)
方法はいろいろあります。いくつか紹介します。
○方法1
たぶん unit2.pas (Form2があるユニット) の implementation の下に
uses unit1;
でForm2の使いたいところで
Form1.関数();
でOK。
ただし、循環参照エラーになる可能性もあります(たぶん大丈夫だと思いますが)
また、Form1が開放された後、呼び出すと実行時エラーになってしまいますので
注意してください。
○方法2
イベントの書き方と一緒です。
ただ、TForm1で完結しておくべき処理、TForm2で完結しておきべき処理
などよく考えてそれぞれのクラスでできる事はやっておく
ようにしたほうが、よいと思います。
(TNotifyEventをまねて手続きや関数のパラメータは自由に定義できます。
この場合、TNotifyEventで十分だと思います)
(Form2はたぶんプロジェクトのぷションで自動作成ですよね)
---------------------------------
unit2.pas
type
TForm2 = class( TForm)
中略
private
FProc: TNotifyEvent;
public
property IwannaCallThisProcNow: TNotifyEvent read FProc write FProc;
end;
implementation
procedure TForm2.でForm1の関数を呼びたいどこか
begin
if Assigned(FProc) then FProc(Self);
end;
---------------------------------
unit1.pas
type
TForm1 = class( TForm)
中略
private
procedure TheForm2WillCallThis(Sender: TObject);
public
end;
implementation
procedure TForm1.TheForm2WillCallThis(Sender: TObject);
begin
//問題の呼びたい関数や処理;
end;
procedure TForm1.のForm2を表示してるどこか
begin
Form2.Show;
Form2.IwannaCallThisProcNow := TheForm2WillCallThis;
end;
皆さんありがとうございました。
ツイート | ![]() |