APP下载

动态下拉式按钮组菜单在VFP中的应用

2014-10-21何文辉

新课程学习·下 2014年10期
关键词:面向对象信息管理系统数据库

何文辉

摘 要:采用面向对象的设计思想开发动态下拉式按钮组菜单(以下简称动态菜单),规划完善动态菜单的各项功能及其在信息管理系统中的应用。

关键词:VFP;面向对象;动态下拉式按钮组菜单;数据库;信息管理系统

使用传统菜单必须要一层一层地点击,才能执行一个表单,有时容易点错,为用户带来不便,并且界面也不美观。而采用传统菜单结合动态菜单的设计,不仅使用户操作便捷,而且界面更加友好、更加专业化,并且动态菜单完全实现了用户自定义菜单功能,大大降低了应用程序的修改维护,满足各种用户需求。

一、动态菜单的功能介绍

1.动态菜单布局:第一级菜单作为动态菜单的第一层,第二级菜单作为动态菜单的第二级,本例只用了两级,可以根据需要拓展到多级,并且一般情况下,级数不要多于2层,否则影响使用效果。其用法是,当点击第一层菜单,如“查询统计”,系统将下拉展开“查询统计”的二级菜单。再次点击其他的第一层菜单时,如“日常管理”时,只展开“日常管理”的二级菜单。其他一级菜单关闭。

2.动态菜单将根据用户ID和用户自定义的菜单项,自动生成动态菜单。不同的用户可根据自己的实际需要,由系统管理员分配菜单项及规定各级菜单的文本和图标等。

二、设计思想

1.按照其功能,可以把每个一级菜单看作一个树型节点,并且其行为也与树型控件很相似,当展开一级菜单中的一个时,其他一级菜单自动关闭,也可全部展开等。当要实现其动态设定菜单项时,也需要将每个一级菜单作为一个节点类来处理

2.设计时,可以将动态菜单分为三个部分来进行。第一部分是设计子节点,子节点的功能是实现执行命令或过程等。第二部分是设计带有子节点的父节点,父节点的功能是子节点的容器,实现二级菜单的动态填充及展开、关闭二级菜单。第三部分是設计动态菜单的主体,主体是父节点的容器,实现一级菜单的动态数据填充及管理一级菜单。

三、关键步骤、技术与核心代码

1.设计子节点类。代码如下:

DEFINE CLASS tb_cbnode as Commandbutton

Alignment=0

Height=25

Pictureposition =1

Width=124

runcmd=“”&&增加的新属性

PROCEDURE Click

LOCAL ls_runcmd

ls_runcmd =This.runcmd

&ls_runcmd &&执行增加的新属性runcmd宏

ENDPROC

ENDDEFINE

2.设计父节点类。

(1)增加新属性。

DEFINE CLASS tb_node as Container &&定义父节点

ENDDEFINE &&这条语句放在整个类定义之后

c_height =0 &&展开时容器的高度

c_maxheight =200 &&容器的最大高度,即容器显示的子节点最多数量,当c_height

&&大于c_maxheight时,容器将显示上、下滚动箭头。

itemcnt =0 &&包含的子节点数

preheight =25 &&单位高度,即点击上、下滚动箭头时子节点移动的单位

caption =0

(2)增加两个对象。

增加一个命令按钮,用来显示父节点的标题及展开、关闭父节点等功能,然后增加一个容器,用以放置子节点。代码如下:

ADD OBJECT node_cb AS CommandButton

PROCEDURE node_cb.Click

This.Parent .Parent.LockScreen =.t. &&防止刷屏

This.Parent.Parent.collapseall&&调用父节点所在容器的collapseall方法

This.Parent.expand &&调用父节点展开方法

This.Parent .Parent.LockScreen =.f.

ENDPROC

ADD OBJECT node_c AS Container &&用来包含子节点的容器

(3)增加几个方法。

增加collapse、expand、downclick、upclick、setp及ynhidecb方法,其含义分别是节点收缩、节点展开、点击向下滚动箭头、点击向上滚动箭头、运行宏及隐藏显示命令按钮。下面仅介绍关键代码

PROCEDURE expand

LOCAL li_height

IF This.c_maxheight>=This.c_height

li_height=This.c_height

ELSE

li_height=This.c_maxheight

ENDIF

This.node_c .Height =li_height

This.Height=This.node_cb.Height  +This.node_c.Height

ENDPROC

3.设计动态菜单的主体。

设计用户自定义菜单录入表。根据需要,分别设计了两个表,一个menu_sub用于保存一级菜单项目,另一个menu_item用于保存二级菜单项目,两个表为一对多关系,menu_sub为主表,menu_item为从表。

总之,这个动态菜单是由三部分组成,分别为子节点、父节点和动态菜单本身,它们的关系均为前一个对象是后一个类的子对象。并且动态菜单的行为方式与树型控件的行为方式很相似,因此在设计此类时自然会产生分别设计三个类的想法。并且为了使其子节点能动态关联执行命令或过程,这里采用了宏,使得在类内的子对象可以执行外部函数。

参考文献:

张洪举.Visual FoxPro 6.0~9.0解决方案与范例大全.人民邮电出版社,2006.

编辑 温雪莲

猜你喜欢

面向对象信息管理系统数据库
交通运输安全第三方评价信息管理系统设计与实现
计算机通信技术在信息管理系统中的运用
全国农村留守儿童信息管理系统正式启用
数据库
面向对象的计算机导论课程教学
基于Web的科研项目管理系统的设计与实现
应力波反射法测锚索长度的数据处理软件设计与实现
数据库
数据库
数据库