| 1.采用了 “3.各种下拉” 中的Freeform，外观稍作了修改：动态增加了2个“收拢”的按钮，能触发收拢、展开的事件; 2.点击按钮，事件中执行了显示/隐藏 TableLayout;

1.可查看创建该Freeform的XML描述文件，里面有2个TableLayout, 但外观作了改动，例如增加了2个按钮：

    function OnReady(id)
    {
     AF.func("Build", "treelist/freeform3.xml");
     AF.func("SetObjProp", "group1 \r\n titleOffset \r\n 96");
     AF.func("SetObjProp", "group2 \r\n titleOffset \r\n 96");

     AF.func("SetObjProp", "group1 \r\n text \r\n 基本信息");
     AF.func("SetObjProp", "group2 \r\n text \r\n 货运信息");

     AF.func("SetObjProp", "group1 \r\n titleHeight \r\n 20");
     AF.func("SetObjProp", "group2 \r\n titleHeight \r\n 20");
     AF.func("SetObjProp", "group2 \r\n round \r\n 12");

     AF.func("AddObject", "input \r\n id=btn1; type=button; text=收拢; x=group1.x + 10; y=group1.y -1; height=26; width=70; style=flat,transparent; icon=treelist/pm.zip#minus.ico; at=left");
     AF.func("AddObject", "input \r\n id=btn2; type=button; text=收拢; x=group2.x + 10; y=group2.y -1; height=26; width=70; style=flat,transparent; icon=treelist/pm.zip#minus.ico; at=left");
    }

2.按钮的点击事件的全部js源码如下：

    var closed1=false, closed2=false;
    function OnEvent(id, Event, p1, p2, p3, p4)
    {
      if(Event != "ButtonClicked") return;
      if(p1 == "btn1") closed1 = !closed1;
      else if(p1 == "btn2") closed2 = !closed2;

      if(closed1) {
       AF.func("SetObjProp", "btn1 \r\n text \r\n 展开");
       AF.func("SetObjProp", "btn1 \r\n img \r\n treelist/pm.zip#plus.ico");
       AF.func("SetObjProp", "layout1 \r\n visible \r\n false");	//layout
       AF.func("SetObjProp", "group1 \r\n height \r\n 28");
      }
      else {
       AF.func("SetObjProp", "btn1 \r\n text \r\n 收拢");
       AF.func("SetObjProp", "btn1 \r\n img \r\n treelist/pm.zip#minus.ico");
       AF.func("SetObjProp", "group1 \r\n height \r\n 170");
       AF.func("SetObjProp", "layout1 \r\n visible \r\n true");		//layout
      }

      if(closed2) {
       AF.func("SetObjProp", "btn2 \r\n text \r\n 展开");
       AF.func("SetObjProp", "btn2 \r\n img \r\n treelist/pm.zip#plus.ico");
       AF.func("SetObjProp", "layout2 \r\n visible \r\n false");	//layout
       AF.func("SetObjProp", "group2 \r\n height \r\n 28");
      }
      else {
       AF.func("SetObjProp", "btn2 \r\n text \r\n 收拢");
       AF.func("SetObjProp", "btn2 \r\n img \r\n treelist/pm.zip#minus.ico");
       AF.func("SetObjProp", "group2 \r\n height \r\n 160");
       AF.func("SetObjProp", "layout2 \r\n visible \r\n true");		//layout
      }
    }

可见，如果TableLayout隐藏了，那么嵌在里面的输入控件也全部隐藏。