转自:http://yedward.net/?id=68

Form中一般常用的画布类型包括content、stacked、tab这三种,其实content类型的画布是每一个form都必须有的,而且只能有且仅有一个。其中,Tab画布算是比较特殊的一种画布了,首先不能直接在Tab上放置任何item,所有的item都是放在Tab的下属的标签页中,其次它的切换也还是蛮有门道的,这篇文章就聊聊怎么控制Form中Tab画布不同标签之间的切换。

假设有这样一个例子,有一个Tab画布(名为TAB_DEMO),其下有headers、lines两个标签页,同时还有一个名为order_lines_stacked的stacked类型的画布,我想实现,headers是第一个标签页,也是默认展示的标签页,我要把order_lines_stacked放在lines标签里面,当切换到lines的时候,order_lines_stacked显示,切换到headers的时候,order_lines_stacked又隐藏掉。

对于上面这个例子,首先要知道的是Tab画布及其标签页和堆叠画布其实是独立的,并不能直接通过属性设置来让stacked画布放置在某一个Tab标签页中,这个时候想要实现这样的功能,就要通过代码来实现,这也就是我要说的Tab特殊的一个地方。这里,我们要用到一个Form级的WHEN-TAB-PAGE-CHANGED触发器,特别要注意的是该触发器的fire条件是用鼠标点击时才触发,也正因为这样后面我们还要加一个触发器,以实现当是使用快捷键而不是鼠标点击来切换标签时候的功能实现。

对于上面的例子,实现过程如下:

在Form级添加WHEN-NEW-FORM-INSTANCE,代码如下:

set_canvas_property('TAB_DEMO', TOPMOST_TAB_PAGE, 'HEADERS');
hide_view('ORDER_LINES_STACKED');

在Form级添加WHEN-TAB-PAGE-CHANGED,代码如下:

if :system.tab_previous_page = 'HEADERS' then
validate(block_scope);
if :system.MODE = 'ENTER-QUERY' or not form_success then
set_canvas_property('TAB_DEMO', topmost_tab_page, :system.tab_previous_page);
return;
end if;
elsif :system.tab_previous_page = 'LINES' then
validate(block_scope);
if :system.MODE = 'ENTER-QUERY' or not form_success then
set_canvas_property('TAB_DEMO', topmost_tab_page, :system.tab_previous_page);
return;
end if;
end if;
if :system.tab_new_page = 'LINES' then
show_view('ORDER_LINES_STACKED');
go_item('ORDER_LINES.ORG'); -- ORDER_LINES.ORG是一个Item,假设本来LINES标签页上就已经设置了
elsif :system.tab_new_page = 'HEADERS' THEN
hide_view('ORDER_LINES_STACKED');
go_item('ORDER_HEADERS.DESCRIPTION'); -- ORDER_HEADERS.DESCRIPTION是一个Item,假设本来HEADERS标签页上已经设置了
end if;

如果是使用快捷键切换的话,不会触发上面的trigger,所以做如下处理:

在ORDER_LINES.ORG这Item上面添加一个WHEN-NEW-ITEM-INSTANCE触发器,代码如下:

show_view('ORDER_LINES_STACKED');

在ORDER_HEADERS.DESCRIPTION上面添加一个WHEN-NEW-ITEM-INSTANCE触发器,代码如下:

hide_view('ORDER_LINES_STACKED');

最新文章

  1. OC编码问题输出中文
  2. html5,加密元素
  3. java 字符串转成 json 数组并且遍历
  4. java中super的两种用法
  5. fastboot 教程
  6. poj3553 拓扑序+排序贪心
  7. POJ1840: Eqs(hash问题)
  8. 剑指offer之关于整数的处理
  9. excel去除空格
  10. PyQtdeploy-V2.4 User Guide 中文 (二)
  11. Bootstrap -- 插件: 提示工具、弹出框、 警告框消息
  12. 无法在Application Designer中打开PeopleTools对象
  13. “多个单核CPU”与“单个多核CPU”哪种方式性能较强?
  14. ubuntu 调整分辨率
  15. CentOS下KVM增加磁盘/磁盘扩容/在线扩容
  16. orm工具的基本思想
  17. 获取软件的apk包名、查看手机设备名称等
  18. POJ3150—Cellular Automaton(循环矩阵)
  19. PAT 1038 Recover the Smallest Number[dp][难]
  20. SpringInAction--Bean的作用域

热门文章

  1. Trigger Execution Sequence in Oracle Forms
  2. hdu4662MU Puzzle
  3. memcached实例(enyim.com Memcached Client)
  4. Using the Task Parallel Library (TPL) for Events
  5. [转]用C#实现的条形码和二维码编码解码器
  6. 破解密码那些事儿(Hacking Secret Ciphers with Python)
  7. Codeforces Round #343 (Div. 2) D - Babaei and Birthday Cake 线段树+DP
  8. 在win7的虚拟机中LINUX与winxp两客户机互通问题
  9. Storm系列(十一)架构分析之Supervisor-管理Worker进程的事件线程
  10. IE-一根网线二台电脑上网