[转]Form中控制Tab画布不同标签间切换的方法
转自: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');
最新文章
- OC编码问题输出中文
- html5,加密元素
- java 字符串转成 json 数组并且遍历
- java中super的两种用法
- fastboot 教程
- poj3553 拓扑序+排序贪心
- POJ1840: Eqs(hash问题)
- 剑指offer之关于整数的处理
- excel去除空格
- PyQtdeploy-V2.4 User Guide 中文 (二)
- Bootstrap -- 插件: 提示工具、弹出框、 警告框消息
- 无法在Application Designer中打开PeopleTools对象
- “多个单核CPU”与“单个多核CPU”哪种方式性能较强?
- ubuntu 调整分辨率
- CentOS下KVM增加磁盘/磁盘扩容/在线扩容
- orm工具的基本思想
- 获取软件的apk包名、查看手机设备名称等
- POJ3150—Cellular Automaton(循环矩阵)
- PAT 1038 Recover the Smallest Number[dp][难]
- SpringInAction--Bean的作用域
热门文章
- Trigger Execution Sequence in Oracle Forms
- hdu4662MU Puzzle
- memcached实例(enyim.com Memcached Client)
- Using the Task Parallel Library (TPL) for Events
- [转]用C#实现的条形码和二维码编码解码器
- 破解密码那些事儿(Hacking Secret Ciphers with Python)
- Codeforces Round #343 (Div. 2) D - Babaei and Birthday Cake 线段树+DP
- 在win7的虚拟机中LINUX与winxp两客户机互通问题
- Storm系列(十一)架构分析之Supervisor-管理Worker进程的事件线程
- IE-一根网线二台电脑上网