| 4D v18EXECUTE METHOD IN SUBFORM | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | 
    4D v18
 EXECUTE METHOD IN SUBFORM 
         | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| EXECUTE METHOD IN SUBFORM ( subformObject ; methodName {; return {; param} {; param2 ; ... ; paramN}} ) | ||||||||
| 引数 | 型 | 説明 | ||||||
| subformObject | テキスト |   | サブフォームオブジェクトの名称 | |||||
| methodName | テキスト |   | 実行するプロジェクトメソッドの名前 | |||||
| return | 演算子, 変数 |   | メソッドが値を戻さない場合 * | |||||
|   | メソッドから返される値 | |||||||
| param | 式 |   | メソッドに渡す引数 | |||||
EXECUTE METHOD IN SUBFORM コマンドを使用して サブフォームオブジェクトsubformObject のコンテキストでプロジェクトメソッドmethodName を実行できます。
呼ばれるプロジェクトメソッドは任意の数の引数をparam に受け取ることができ、また戻り値はreturnに返されます。メソッドが値を戻さない場合は、returnに * を渡します。
methodNameに はデータベースあるいはコマンドを実行するコンポーネントからアクセスが可能なプロジェクトメソッドを指定できます。実行コンテキストは呼び出されたメ ソッド内でも保持されます。つまりカレントフォームおよびカレントフォームイベントは指定されたまま引き継がれます。サブフォームがコンポーネント由来の 場合、メソッドはコンポーネントに属していなければならず、また"コンポーネントとホストデータベースで共有する"プロパティがチェックされていなければ なりません。
このコマンドは (subformObject オブジェクトを含む) 親フォームのコンテキスト、例えばフォームメソッド等から実行しなくてはなりません。
注: methodName メソッドは、subformObject がカレントページに見つからないか、インスタンス化されていない場合、実行されません。
親フォーム"Company"中にサブフォーム"ContactDetail"が置かれています。ContactDetailフォームが設定されたサブフォームオブジェクトの名前は"ContactSubform"です。ここでcompanyのフィールド値に基づき、サブフォーム内の特定の要素のアピアランスを変更したいとします (例えば[Company]City="New York"のときは"contactname"を赤に、[Company]City="San Diego"のときは青にするなど)。このメカニズムはSetToColor メソッドに実装されています。この結果を得るために、SetToColor メソッドをCompany親フォームの"On Load"フォームイベントのプロセスから直接呼び出すことはできません。なぜなら"contactname"オブジェクトはカレントフォームではなく、 "ContactSubform"サブフォームオブジェクト中に表示されているフォームに属しているからです。そのため正しく動作させるために、メソッドはEXECUTE METHOD IN SUBFORM コマンドを使用して実行されなければなりません。
 Case of
    :(Form event code=On Load)
       Case of
          :([Company]City="New York")
             $Color:=$Red
          :([Company]City="San Diego")
             $Color:=$Blue
          Else
             $Color:=$Black
       End case
       EXECUTE METHOD IN SUBFORM("ContactSubform";"SetToColor";*;$Color)
 End caseコンポーネントとして使用される予定のデータベースを開発しています。このデータベースには共有プロジェクトフォーム (例として"Calender"と名付けます) が含まれています。またこのフォームにはダイナミック変数やカレンダを調整するための公開プロジェクトメソッド (SetCalendarDate(varDate)) が含まれています。
このメソッドがCalenderフォームメソッドで直接使用される場合、開発者は直接このメソッドをフォームの"On Load"イベントで呼び出すことができます: 
 SetCalendarDate(Current date) EXECUTE METHOD IN SUBFORM("Cal1";"SetCalendarDate";*;!10/01/01!)
 EXECUTE METHOD IN SUBFORM("Cal2";"SetCalendarDate";*;!10/05/05!)上級例題: 先と同じ状況で、ここでは汎用メソッドを作成してみます:
  // SetCalendarDate メソッドの内容
 C_DATE($1)
 C_TEXT($2)
 Case of
    :(Count parameters=1)
  // 標準のメソッド実行 (フォーム内で呼び出された場合)
  // またはケース2からの再帰呼び出し
 
    :(Count parameters=2)
  // 外部呼出し、
  // 1つの引数で再帰呼び出しを行う
       EXECUTE METHOD IN SUBFORM($2;"SetCalendarDate";*;$1)
 End caseコマンドが正しく実行されるとシステム変数OKに1が設定され、そうでなければ0が設定されます。
	プロダクト: 4D
	テーマ: フォームイベント
	番号: 
        1085
        
        
        
	
	初出: 4D v12
	ランゲージリファレンス ( 4D v18)
	
	
	
 コメントを追加
コメントを追加