Form中控制Tab画布不同标签间切换的方法

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');

这篇文章中涉及到的一些其他知识,比如说一些系统变量啊,有些在前面的博文中写了,有些还没有,我会在后面的工作、学习中慢慢总结在这里,我始终坚信再好的记忆,也不如找个地方记下来,以后需要的时候输个关键词查阅一下就OK了。

本文标题:Form中控制Tab画布不同标签间切换的方法

本文链接:http://yedward.net/?id=68

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章