STree

Q1
ツリーの開閉を一括で行いたい
[内容]
ボタンの押下などで、ツリーの一括開閉をするにはどうすればよいか
 
A1
STree上のアイテムツリーの一括開閉は、以下2つの方法で実装する事が可能です。

(A) STree上のアイテムを取得し、取得したアイテムのExpandedプロパティを
順次変更する
STreeクラスや、 STree上のアイテムとなるSTreeItemクラスには、表示されているアイテムの情報を取得するプロパティがあり、 これらをループ処理等と組み合わせる事によってツリーの一括開閉が可能となります。

ツリーの一括開閉処理で利用するプロパティの一例として、以下STreeItemクラスのプロパティがあります。

[ STreeItemクラスのプロパティ ]
(1) Childプロパティ
  自身の最初の子のアイテムへのアクセッサとなるSTreeItemオブジェクトを取得します。
(2) Parentプロパティ
  自身の親のアイテムへのアクセッサとなるSTreeItemオブジェクトを取得します。
(3) Expandedプロパティ
  アイテムのツリーの開閉状態です。(TRUE:開く/FALSE:閉じる)
(4) Nextプロパティ
  自身の次のアイテムへのアクセッサとなるSTreeItemオブジェクトを取得します。

STreeItemクラスのプロパティを利用した一括開閉処理のサンプルコードは以下となります。

[サンプルコード1]
STree Stree1{
  X = 10;
  Y = 10;
  Width = 200;
  Height = 218;

  Function ExpandAll(){
   /* ルートアイテム以下のすべてを開く */
   _ExpandAll_internal(RootItem, $TRUE);
  }
  Function CollapseAll(){
   /* ルートアイテム以下のすべてを閉じる */
   _ExpandAll_internal(RootItem, $FALSE);
  }
  Function _ExpandAll_internal(item, bExpand){
   /* 引数itemを起点にitemと同じ階層のSTreeItemを開閉する */
   var iter = item;
   while(iter != null){
    
    if(iter.Child != null) { ・・・・・(1)
     /* ★ポイント
          子アイテムが存在する場合、再帰的に開閉する */
     _ExpandAll_internal(iter.Child, bExpand);
     /* ルートアイテム以外であれば開閉する */
     if(iter.Parent != null){ ・・・・・・(2)
      iter.Expanded = bExpand;  ・・・・・・(3)
     }
    }
    
    /* 次のアイテムを取得 */
    iter = iter.Next; ・・・・・・(4)
   }
  }
 }

 Button button1{
  X = 221;
  Y = 120;
  Width = 100;
  Height = 100;
  Title = "開く";

  Function onTouch(e){
   ^.STree1.ExpandAll();
  }
 }
(B) STreeItemクラスのExpandAllメソッドを利用する
Biz/Browser V ver5.0.2.0より追加されたメソッドです。

以下のように、ルートアイテム(RootItem)へExpandAllメソッドを実行すると、全てのアイテムに対しツリーを一括開閉する事が可能です。

[サンプルコード2]
 STree Stree1{
  X = 12;
  Y = 133;
  Width = 200;
  Height = 218;
 }
 Button button1{
  X = 221;
  Y = 243;
  Width = 100;
  Height = 100;
  Title = "開く";
  Function onTouch(e){
   /* ★ポイント アイテムを全て開く */
   ^.STree1.RootItem.ExpandAll($TRUE);
  }
 }
 Button button2{
  X = 221;
  Y = 136;
  Width = 100;
  Height = 100;
  Title = "閉じる";
  Function onTouch(e){
    /* ★ポイント アイテムを全て閉じる */
   ^.STree1.RootItem.ExpandAll($FALSE);
  }
 }

実際の挙動については、CRSファイル形式のサンプル
 「ツリーの開閉を一括で行いたい(Stree50_003.zip)」
をご確認ください。

管理番号:Stree50_003
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser V・Biz/Designer V TIPS集 トップへ