<< Click to Display Table of Contents >> マニュアル > 画面作成ガイド > フォームとダイアログ/フレーム/ビュー > ユーザダイアログ > ユーザーダイアログの作成例 > ダイアログから結果を受け取る |
概要
ユーザーダイアログ側で画面から設定された何らかの情報を、ダイアログの呼び出し元フォームへ返したい場合があります。例えば、パラメータ入力用のダイアログを表示して、ダイアログから入力された設定値を呼び出し元のフォームに返して、設定値に基づいた処理を呼び出し元のスクリプトで行いたいような場面です。
このようなケースでは、共通イベントの「OnCommonEvent」を利用します。OnCommonEventは全てのオブジェクトに用意されているイベントであり、共通メソッドの「CallCommonEvent」メソッドの呼び出しによって自由に発生させることのできるイベントです。例えば、ダイアログ側からCallCommonEventを呼び出してOnCommonEventを発生させる事で、イベントの引数を介してパラメータを渡すことができます。
ダイアログから処理結果を受け取る実装例
ここでは、共通イベントの「OnCommonEvent」と共通メソッドの「CallCommonEvent」を使用してダイアログから処理結果を受け取る方法について説明します。
(対象サンプル:e.g.3)
•ダイアログの呼び出し元フォーム:Form01
•ダイアログとして表示するフォーム:Form04
(処理内容)
•Form01に、ダイアログ呼び出しのためのボタンコントロールを1つ、ダイアログから受け取った結果を表示するためのラベルを1つ配置する。ボタンのOnMouseUpイベントにて、OpenDialogメソッドを呼び出す際にオープンパラメータに自分自身のオブジェクト(this、すなわちボタンコントロール自身)を指定してForm04をダイアログ表示する。又、Form01のボタンコントロールのOnCommonEventイベントにて、イベントを介して受け取った値をラベルに表示する。
•Form04に、自身のダイアログを閉じるためのボタンコントロールを1つ、任意の値を入力するためのエディットボックスを1つ配置する。Form04のOnInitializeイベントにて、オープンパラメータからthisで渡された呼び出し元オブジェクトを取り出してフォームの変数に格納する。ボタンのOnMouseUpイベントでは、呼び出し元オブジェクトのOnCommonEventを発生させるためのCallCommonEventメソッドを呼び出す。CallCommonEventメソッドに渡すvalueパラメータには、エディットボックスのText(エディットボックスの値)を指定するようにする。
■Form01の実装
ボタンを1つ、ラベルを1つ配置します。ここでは例として、ラベルの名称をLabel1としておきます。
ボタンのOnMouseUpイベントに、Form04をダイアログとして呼び出すための処理を記述します(OpenDialogメソッド)。ここでは例として、オープンパラメータのパラメータ名を「Target」として、ボタン自身のオブジェクトを指す「this」を含めるように記述します。オブジェクトをパラメータに含めるために「MAP」ルートメソッドを使用する点に注意してください。尚、オープンパラメータはOpenDialogの第3引数で指定します。第2引数(ダイアログパラメータ)は今回は指定しないため、ブランクとしておきます。
続いて、ボタンのOnCommonEventイベントを定義し、ダイアログから受け取った値をラベルに表示する処理を記述します。ここでは例として、Form04からの結果の場合はnameに「Form04Message」という文字列が渡ってくるものとし、if文で判定するように実装しておきます。
event OnMouseUp(button) { var vOpenParam = ::MAP("Target", this); ::OpenDialog("Form04","",vOpenParam); } event OnCommonEvent(name,value) { if(name == "Form04Message") { parent.Label1.Text = value; } }
■Form04の実装
ボタンを1つ、エディットボックスを1つ配置します。ここでは例として、エディットボックスの名称をEdit1としておきます。
Form04のグローバル変数として「vTarget」を定義します。フォームのOnInitializeイベントを定義し、GetOpenParamメソッドでオープンパラメータから「Target」を取り出してグローバル変数「vTarget」に代入するように処理を記述します。
var vTarget; event OnInitialize() { vTarget = this.GetOpenParam("Target"); }
続いて、ボタンのOnMouseUpイベントに、CallCommonEventを呼び出す処理を記述します。以下のように記述することで、ボタンから見た「parent」が指すオブジェクト、すなわちForm04フォームのグローバル変数「vTarget」に保存されている呼び出し元オブジェクトのOnCommonEventが呼び出されます。ここでは例として、第1引数(name)に「Form04Message」という文字列を、第2引数(value)にEdit1のTextを渡すように記述します。
その後、ダイアログを閉じるための処理を記述します(CloseDialogメソッド)。ダイアログの終了処理については「フォームをダイアログ表示する」の実装例を参照してください。
event OnMouseUp(button) { parent.vTarget.CallCommonEvent("Form04Message",parent.Edit1.Text); ::CloseDialog(parent.GetDialogName()); }
■動作確認
Panel Browserを実行し、Form01を表示します。
この段階では、ラベルの値は「Label」となっています。
ボタンをクリックするとForm04がダイアログ表示されます。
ダイアログのエディットボックスから任意の文字列を入力し、OKボタンをクリックします。
ここでは例として「TEST MESSAGE」と入力しています。
すると、上記で入力された文字列が、Form01のラベルに表示されます。