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コレクションのインスタンスを参照するよう、コードを変更しました。フォーム・インスタンスを参照する構文は、以下のとおりです。
 それから#DFORMSコレクションのインスタンスを参照するよう、コードを変更しました。フォーム・インスタンスを参照する構文は、以下のとおりです。 

CollectionName<キー>

...

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

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(#dforms<>.OKPressed)
   execute getlist
ENDROUTINE 

...

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

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

EVTROUTINE HANDLING(#COM_OWNER.Closing)
   invoke #dforms<>.CloseForm
ENDROUTINE

...

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

2.14.7 マルチフォーム・アプリケーション例のソース・コード

...

 」も参照してください。