Form1で作成した関数をForm2で使用するためには?

解決


ito  2006-03-28 02:27:06  No: 20709

Form1で作成した関数をForm2でも使用したいのですがその関数を呼び出すにはどうすればよいのでしょうか?全く基礎的なような質問ですみません。


むく  2006-03-28 03:11:29  No: 20710

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;


  2006-03-28 03:30:16  No: 20711

> Form1で作成した関数をForm2でも使用したいのですが

回答が逆なんでは?


Delphi forever  2006-03-28 03:32:08  No: 20712

既に解答があったみたいですが(汗)
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;


ito  2006-03-29 00:07:23  No: 20713

皆さんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加