Tips

サブページのあるマルチページフォームを擬似的に表現するテクニック

日付2009/07/06
ID75817 (英語原文参照)
バージョン11
プラットフォームMac & Win

これまで多くのデベロッパは、データベースのユーザインタフェースにマルチページのフォームを活用してきました。そのようなデザインを追求しているうちに、いくつかのページは比較的シンプルにつつ、一部のページにはタブコントロールを配置してさらに細かく組織したいと思うようになるかもしれません。つまり、マルチページの入れ子のような構造です。たとえば、ページ4には、4-1、4-2、4-3...といったサブページをつくることができれば良いのに、という話です。そのようなインタフェースをひとつのフォームだけでデザインするのであれば、おそらくそれぞれのサブページを実際には別々のページとし、かなりの数のページを管理することになるでしょう。それを回避するために、複数のフォームを使用するというテクニックがあります。

この場合、ユーザの目に触れるひとつのフォームは、実際には複数のフォームで成り立っていることになります。それぞれのフォーム(ユーザの視点からすればページ)には、サブページがいくつ存在します。それらのフォームは、基本的なデータとオブジェクトをそれぞれのページに継承しているので、ひとつのページとしての体裁を保っています。元締めのページには、そのような「ページ」を切り替えるためのタブコントロールだけが配置されています。もっともこのフォームにページはなく、CurrentPage変数、VALIDATE、CANCELを駆使してそれぞれのフォームを開いたり閉じたりしているだけです。

構成

myform_page1
myform_page2
myform_page3
myform_page4

それぞれのフォームには、mytab_var変数が関連づけられたタブコントロールが配置されています。

最初のフォーム(実際には複数のフォームの混合体)を開くメソッドは次のようなものです。

C_LONGINT(CurrentPage;$win)
C_BOOLEAN(CloseWindow)

CurrentPage:=1
CloseWindow:=False

$win:=Open form window("myform_page1")

  `this method, "initAll", initializes the shared variables for "myform"
initAll

Repeat 
    `this method, "initPage", initiates any page specific variables
  initPage(CurrentPage)
  DIALOG("myform_page"+String(CurrentPage))
Until (CloseWindow)

それぞれのページ(実際には個別のフォーム)には次のようなフォームメソッドが記述されています。

Case of 
  : (Form event=On Close Box )
    CloseWindow:=True
    CANCEL
End case

それぞれのタブコントロールには、次のようなオブジェクトメソッドが記述されています。

Case of 
  : (Form event=On Clicked )
    CurrentPage:=mytab_var
    CANCEL
End case

このようにしておけば、それぞれのページを個別のフォームで表現することができ、したがって自由にサブページを設けることができます。