ユーザーダイアログから結果を受け取る

<< Click to Display Table of Contents >>

マニュアル > 画面作成ガイド > ダイアログ/フレーム/ビュー > ユーザダイアログ >

ユーザーダイアログから結果を受け取る

ユーザーダイアログから処理結果を受け取る

ユーザーダイアログで設定した情報をダイアログの呼び出し元へ返したい場合があります。

 

例えば、ボタンを押すとダイアログが表示され、ダイアログで設定値を入力し、その設定値を呼び出し元のフォームに表示したり、スクリプトでその設定値を使用するような場面です。

 

このようなケースでは、ダイアログ側からCallCommonEventを使用して、呼び出し元フォームのOnCommonEventを発生させる方法があります。OnCommonEventイベントは、CallCommonEventによりユーザーで自由に発生させることのできるイベントです。CallCommonEventを用いると、任意のオブジェクトに対してこのイベントを介してメッセージを送ることができます。

 

尚、コモンダイアログ(Yes/Noメッセージボックスなど)についても、内部的にはCallCommonEventの呼び出しによってOnCommonEventを発生させる仕組みになっています。

 

例えば、Yes/Noメッセージボックスでは以下のように使用されています。

 

■Yesボタンが押された時

event OnMouseUp(button)
{
	parent.g_target.CallCommonEvent("messagebox", TRUE);
}

 

■Noボタンが押された時

event OnMouseUp(button)
{
	parent.g_target.CallCommonEvent("messagebox", FALSE);
}

 

 

サンプルのダウンロード

このサンプルは、以下からご利用頂けます。

 

 

 

CallCommonEventの使用例

CallCommonEventの使用方法を紹介します。

 

ここではダイアログで設定した値を呼び出し元フォームに表示を行います。

 

fap_dialog_0005

 

 

以下は、設定手順の例です。

 

1.メインフォームとダイアログ呼び出し用フォームを用意する

 

ここでは、Form01をメインフォームとし、Form02をダイアログとして呼び出します。

 

fap_dialog_0006

 

2.メインフォームにダイアログ呼び出しボタンとダイアログから受け取った値を表示するテキストボックスを作成する

 

fap_dialog_0007

 

3.ダイアログ用フォームにOKボタン(閉じるボタン)と値を入力するテキストボックスを作成する

 

fap_dialog_0008

 

4.メインフォームのダイアログ呼び出しボタンに以下のスクリプトを記述する

 

処理内容

① OpenDialogメソッドを使用して、Form02を表示させます。

② Form02に記述されたユーザー関数を呼び出します。ここで自分自身のオブジェクト情報を渡します。

event OnMouseUp(button)
{
	::OpenDialog("Dialog01", "Form02", "DlgForm01");
	::DlgForm01.fSetParam(this);
}

 

5.Form02に以下のユーザー関数を記述する

var g_target;
function fSetParam(tg)
{
	var bObj = ::IsObj(tg);
	if (!bObj) return;
	g_target = tg;
}

 

このユーザー関数は4の②で呼び出され、呼び出し元のオブジェクト情報をダイアログ側に格納します。このオブジェクト情報はフォームへ戻す際に使用します。

 

6.ダイアログのOKボタンに以下のスクリプトを記述する

 

処理内容

① ダイアログのテキストボックスに入力された値を呼び出し元フォームへ返します。

  呼び出し元は、5のユーザー関数で受け取ったオブジェクト情報を使用します。

② ダイアログを閉じます。

event OnMouseUp(button)
{
	parent.g_target.CallCommonEvent(parent.GetFormId(),parent.Edit.Text);
	::CloseDialog(parent.GetDialogName());
}

 

7.呼び出し元のボタンにOnCommonEventイベントを追加する

 

このイベントで、6の①から引数として渡された入力値を取得し、フォームのテキストボックスに受け取った情報を設定します。

event OnMouseUp(button)
{
	::OpenDialog("Dialog01", "Form02", "DlgForm01");
	::DlgForm01.fSetParam(this);
}

event OnCommonEvent(name,value)
{
	parent.MsgEdit.Text = value;
}

 

8.作成した画面をPanel Browserで実行し、動作を確認する