Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../index.htm#lansa/l4wdev06_0575.htm]
現在地:

...

作成したアプリケーションでは、同時に1人の社員の詳細だけを表示できます。そのため、同時に複数の社員の詳細を表示できる別のバージョンのアプリケーションも作成しました。
Image Removed作成したアプリケーションでは、同時に1人の社員の詳細だけを表示できます。そのため、同時に複数の社員の詳細を表示できる別のバージョンのアプリケーションも作成しました。
Image Added

コレクション

フォームの複数のインスタンスを表示するために、この定義ステートメントをWRKEMPに追加し、フォームのコレクションを作成しました。  

     DEFINE_

...

COM CLASS(#PRIM_KCOL)

...

 NAME(#DFORMS)

...

 COLLECTS(#FRMDETAIL)

...

 KEYEDBY(#EMPNO)

 
このステートメントは、#DFORMSというFRMDETAILのインスタンスのコレクションを定義します。フォーム・インスタンスは、社員番号で識別されます。
それから#DFORMSコレクションのインスタンスを参照するよう、コードを変更しました。フォーム・インスタンスを参照する構文は、以下のとおりです。
 
CollectionName<キー>
 
詳細メニュー・オプションのコードは、以下のようになります。
 
EVTROUTINE HANDLINGそれから#DFORMSコレクションのインスタンスを参照するよう、コードを変更しました。フォーム・インスタンスを参照する構文は、以下のとおりです。 

     CollectionName<key>

詳細メニュー・オプションのコードは、以下のようになります。

     EVTROUTINE HANDLING(#MDetails.Click)

...


  SET COM(#dforms<#empno>)

...

 formowner(#com_owner)

...


  invoke #dforms<#empno>.showform
  set com(#dforms<#empno>)

...

 employee(#empno)

...


  invoke #dforms<#empno>.GetInfo

...


ENDROUTINE

すべてのフォーム・インスタンスの参照

FRMDETAILのOKPressedイベントのイベント・ルーチンは、コレクション内の任意の詳細フォームを参照するように変更する必要があります。 EVTROUTINE HANDLING

     EVTROUTINE HANDLING(#dforms<>.OKPressed)

...


   execute getlist
ENDROUTINE

OKPressedイベントが詳細フォームのいずれかから通知されると、GETLISTサブルーチンが実行されます。このコードから見ると、すべてのインスタンスが参照されるとコレクションのキー値は指定されません。インスタンスは#dforms<>です。 

最後に、メイン・フォームが閉じられたときにFRMDETAILフォームのすべてのインスタンスが閉じられるよう、WRKEMPのClosingイベントのイベント・ルーチンを追加しました。 EVTROUTINE HANDLING

     EVTROUTINE HANDLING(#COM_OWNER.Closing)

...


   invoke #dforms<>.CloseForm

...


ENDROUTINE

同じ結果になるこれ以外の方法は、FRMDETAILのFormStyleをOwnedに設定することです。この設定は、フォームが他のフォームのメンバー・フォームの場合、オーナー・フォームが閉じられたときに閉じられることを指定します。

2.14.7 マルチフォーム・アプリケーション例のソース・コード」も参照してください。
[ Image Removed |../../index.htm#lansa/l4wdev06_0575.htm]も参照してください。