ダイアログ フォームの管理
前の例では、"お子様はいらっしゃいますか?" にチェック マークが入っているかどうかに関係なく、2 つ目のダイアログが表示されます。このフラグがチェックされていない場合は 2 つ目のダイアログを表示しないようにする方法を見てみましょう。最初のダイアログの[OK]ボタンに対して OnClick ハンドラーを作成します(ハンドラーを作成するには、ボタンをダブルクリックします)。
Pascal スクリプト:
procedure Button1OnClick(Sender: TfrxComponent);
begin
DialogPage2.Visible := CheckBox1.Checked;
end;
C++ スクリプト:
void Button1OnClick(TfrxComponent Sender)
{
DialogPage2.Visible = CheckBox1.Checked;
}
このコードにより、フラグがチェックされていない場合は、2 つ目のダイアログ(DialogPage2)が非表示になります。レポートをプレビューして、これが正しく動作することを確認します。
フォームを管理する別の方法は、OnRunDialogs レポート イベントを使用する方法です。このイベント ハンドラーを作成するために、レポート ツリーまたはオブジェクト インスペクターで Report オブジェクトを選択し、オブジェクト インスペクターで[イベント]タブに切り替えます。OnRunDialogs イベントをダブルクリックして、ハンドラーを作成します。
このハンドラーで以下のコードを記述します。
Pascal スクリプト:
procedure frxReport1OnRunDialogs(var Result: Boolean);
begin
Result := DialogPage1.ShowModal = mrOk;
if Result then
begin
if CheckBox1.Checked then
Result := DialogPage2.ShowModal = mrOk;
end;
end;
C++ スクリプト:
void frxReport1OnRunDialogs(bool &Result);
{
Result = DialogPage1.ShowModal == mrOk;
if (Result)
{
if (CheckBox1.Checked)
Result = DialogPage2.ShowModal == mrOk;
}
}
ハンドラーは次のように動作します。
- 最初のダイアログが表示されます。
- それが[OK]ボタンによって閉じられた場合は、CheckBox1 の状態を調べます。
- この状態が Checked である場合は、2 つ目のダイアログを表示します。
- 2 つ目のダイアログが[OK]ボタンによって閉じられた場合は、Result を True に設定します。
- ハンドラーが Result = True を返した場合は、プレビューが構築されます。Result = False を返した場合は、レポートはプレビューを構築しないで実行を停止します。