ユーザーダイアログの共通化

<< Click to Display Table of Contents >>

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

ユーザーダイアログの共通化

ユーザーダイアログの共通化について

全く同じ仕様のユーザーダイアログを複数の箇所から表示する必要があるような場合、処理ごとにフォームを一つずつ作成してしまうと、処理の数がある場合に手間がかかったり、ダイアログの仕様を変更したい場合の対応が大変になったり等の課題が生じます。そのようなケースのために、ダイアログとして使用するフォームを1つ作成して共通的に利用する方法があります。

 

この方法を応用することで、複数のボタンや複数のフォームから、1つのダイアログに対してそれぞれ異なった処理を行うことができるようになります。

 

ここでは、ダイアログの共通化の作成例について紹介します。

 

 

 

サンプルのダウンロード

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

 

 

 

ユーザーダイアログの共通化の作成例

このサンプルは、各ボタンからの呼び出しに応じて1つのフォームを共通的なダイアログとして表示します。

 

呼び出し元のボタンにより、ダイアログに表示される内容が切り替わります。

 

fap_dialog_0009

 

 

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

 

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

 

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

 

fap_dialog_0010

 

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

 

fap_dialog_0011

 

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

 

fap_dialog_0012

 

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

 

処理内容

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

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

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

 

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

 

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

var g_target;
var g_val;

function fSetParam(tg,val)
{
	var bObj = ::IsObj(tg);
	if (!bObj) return;
	g_target = tg;
	g_val = val;
	Edit.Text = val;
}

 

 

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", "Form03", "DlgForm01");
	::DlgForm01.fSetParam(this,this.Text);
}

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

 

8.Form02への移動ボタンを作成する

 

fap_dialog_0013

 

event OnMouseUp(button)
{
	::OpenForm("Form02");
}

 

9.Form01をベースにForm02を作成する

 

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