设为首页
给我留言
首页       关于蓬缘    克隆建站    模版建站    建站流程    建站疑虑    支付方式    网站推广    网站优化    建站学院    联系我们    
蓬缘网络技术工作室真心为您服务!霸州网站建设 + 霸州网页设计 + 霸州企业建站 + 霸州FLASH设计 + 霸州网站开发 + 平面设计,专业技术人员一对一服务让建站更加专业更加放心……二十四小时服务热线: 15932615201 13810319167。欢迎来电咨询……霸州网站建设工作室|霸州网站制作|霸州建站|霸州网站改版|霸州企业建站|霸州专业建站|蓬缘网络技术工作室 - 我要网站 - http://www.woyaowangzhan.com……霸州蓬缘网络技术工作室是专业的建站团队,提供专业的霸州建站服务:1、霸州专业网站建设(霸州网站设计)2、霸州网站推广(百度、Google、搜狐、阿里巴巴等)3、霸州网站优化(SEO、百度推广优化)4、霸州域名注册(.com/.cn/.net等)5、霸州虚拟主机(ASP、.net等)6、霸州政府建站7、霸州门户网站…… 现在时间是
建站学堂
 
关于VB.NET动态加载菜单的参考
[ 2008-7-24 8:57:00 ] 作者: 来源:

  核心提示:...

假设系统精确至3级菜单,其中MDI窗口菜单为第1级,其下拉为第2级,  
第2级展开为第3级。对所有菜单项MENUITEM,初始状态为VISIBLE   =   FALSE,  
当某操作员登录时,根据ID号,查对应权限表,有则对应MENUITEM的VISIBLE  
属性改为TRUE,否则不动。因此应有操作员权限表,其结构如下:  
CREATE   TABLE   t_czyqx   (  
                czydm                                 char(3)   NOT   NULL,  
                mkdm                                   int   NOT   NULL,  
                yjcddm                               int   NOT   NULL,  
                ejcddm                               int   NOT   NULL,  
                sjcddm                               int   NOT   NULL  
)  
   
其中MKDM为模块代码,根据具体应用不同,这个表的结构可作改动,此处假设  
有模块,每模块下有若干菜单功能。YJCDDM为一级菜单代码,EJCDDM为2级菜单  
代码,SJCDDM为3级菜单代码。某菜单有权限时,置1,反之置0,表示操作员无  
此菜单权限。因此系统还需3个表,分别表示1-3级菜单清单,当然也应有模块  
代码表,表示系统有哪些模块,1级菜单结构如下:  
CREATE   TABLE   meter.t_xtyjcd   (  
                yjcddm                               int   NOT   NULL,  
                mkdm                                   int   NOT   NULL,  
                cdmc                                   char(20)   NULL  
),  
同理,系统2级菜单如下:  
CREATE   TABLE   meter.t_xtejcd   (  
                mkdm                                   int   NOT   NULL,  
                yjcddm                               int   NOT   NULL,  
                ejcddm                               int   NOT   NULL,  
                cdmc                                   char(20)   NULL  
),  
依次可推出3级菜单的结构,此处不作遨述。需要说明的是,系统1-3级菜单  
代码表在系统初始化时应保存系统设计好的菜单清单,其中CDMC菜单名称一栏  
应保存在PB实际设计MENU时使用的CAPTION。假设系统有1级菜单名为M_CLEAR,在模块1下,  
且不管模块1是什么。则T_XTYJCD应有记录(1,1,‘清除’),现设计一个函数,  
用来查某操作员在模块下是否有对应菜单代码的权限,说明如下:  
//**   检查一级菜单权限  
//**   输入参数:MKDM模块代码,CDDM一级菜单代码,CZYDM:操作员代码  
//**   输出:   无  
//**   返回:   0有权限,-1:无权限  
int   i  
   
SELECT   COUNT(*)   INTO   :i   FROM   meter.t_czyqx    
WHERE   czydm   =   :czydm   AND   mkdm   =   :mkdm   AND   yjcddm   =   :cddm;  
IF   i   >   0   THEN  
RETURN   0  
ELSE  
RETURN   -1  
END   IF  
同理可设计出检查2级菜单和3级菜单的函数,那么当查出某操作员是否有菜单权限后  
怎么办呢?在这里我们写段程序,放在使用该菜单的窗口的PFC_PREOPEN事件中(此处  
用到PFC,对于没用PFC的弟兄,可参考其他事件,如OPEN),事件程序清单如下:  
//**   检查菜单权限  
int   i,j,k,k3,k2,cddm1,cddm2,cddm3  
int   sec_cdcount,thd_cdcount  
INT   mkdm   =   2  
   
//**   一级菜单权限  
SELECT   COUNT(*)   INTO   :i   FROM   meter.t_xtyjcd    
WHERE   mkdm   =   :mkdm;  
IF   i   >   0   THEN  
DECLARE   my_cur   CURSOR   FOR    
SELECT   yjcddm   FROM   meter.t_xtyjcd   WHERE   mkdm   =   :mkdm;  
OPEN   my_cur;  
FOR   j   =   1   TO   i  
FETCH   my_cur   INTO   :cddm1;  
k   =   f_check1cd(mkdm,cddm1,gs_czydm)  
IF   k   =   0   THEN  
m_filemanage.item[cddm1].visible   =   true  
m_filemanage.item[cddm1].toolbaritemvisible   =   true  
//**   再检查对应的二级菜单  
SELECT   COUNT(*)   INTO   :sec_cdcount   FROM   meter.t_xtejcd    
WHERE   mkdm   =   :mkdm   AND   yjcddm   =   :cddm1;  
IF   sec_cdcount   >   0   THEN  
DECLARE   my_cur2   CURSOR   FOR  
SELECT   ejcddm   FROM   meter.t_xtejcd   WHERE   mkdm   =   :mkdm   AND   yjcddm   =   :cddm1;  
OPEN   my_cur2;  
FOR   k2   =   1   TO   sec_cdcount  
FETCH   my_cur2   INTO   :cddm2;  
k   =   f_check2cd(mkdm,cddm1,gs_czydm,cddm2)  
IF   k   =   0   THEN  
m_filemanage.item[cddm1].item[cddm2].visible   =   true  
m_filemanage.item[cddm1].item[cddm2].toolbaritemvisible   =   true  
//**   然后是3级菜单的检查  
SELECT   COUNT(*)   INTO   :thd_cdcount   FROM   meter.t_xtsjcd    
WHERE   mkdm   =   :mkdm   AND   yjcddm   =   :cddm1   AND   ejcddm   =   :cddm2;  
IF   thd_cdcount   >   0   THEN  
DECLARE   my_cur3   CURSOR   FOR  
SELECT   sjcddm   FROM   meter.t_xtsjcd   WHERE   mkdm   =   :mkdm   AND   yjcddm   =   :cddm1  
AND   ejcddm   =   :cddm2;  
FOR   k3   =   1   TO   thd_cdcount    
FETCH   my_cur3   INTO   :cddm3;  
k   =   f_check3cd(mkdm,cddm1,gs_czydm,cddm2,cddm3)  
IF   k   =   0   THEN  
m_filemanage.item[cddm1].item[cddm2].item[cddm3].visible   =   true  
m_filemanage.item[cddm1].item[cddm2].item[cddm3].toolbaritemvisible   =   true  
ELSE  
m_filemanage.item[cddm1].item[cddm2].item[cddm3].visible   =   false  
m_filemanage.item[cddm1].item[cddm2].item[cddm3].toolbaritemvisible   =   false  
END   IF  
NEXT  
END   IF   //**   END   OF   检查系统3级菜单  
ELSE  
m_filemanage.item[cddm1].item[cddm2].visible   =   false  
m_filemanage.item[cddm1].item[cddm2].toolbaritemvisible   =   false  
END   IF  
NEXT  
CLOSE   my_cur2;  
END   IF   //**   END   OF   检查二级菜单  
ELSE  
m_filemanage.item[cddm1].visible   =   false  
m_filemanage.item[cddm1].toolbaritemvisible   =   false  
END   IF  
NEXT  
CLOSE   my_cur;  
END   IF  
可以看到,菜单代码表中的代码对应的是实际菜单中的序号,用到了菜单的menu.item[No]来直接指定  
菜单,而对菜单名不关心,这样就可放心的使用菜单CAPTION组成菜单树表TREEVIEWITEM,加上其他诸如  
拖放动作等,就是一个很好的精确到菜单的权限管理模块。当然此处说明的办法也是我初次尝试,没有  
用到递归等高级算法,而是硬性规定了菜单的级别(深度),此处抛砖引玉,见笑了



 
   建站学堂
  ●  ASP编程技术
  ●  PHP编程技术
  ●  JSP编辑技术
  ●  ASP.NET编程技术
  ●  JAVA软件开发
  ●  C#软件开发
  ●  VB.NET软件开发
   网站推广与营销
  ● 网站备案的9个细节问题
  ● 网上注册一个域名的意义
  ● 网站从建设到运营的5点注意
  ● 8种提高网站ALEXA排名的方法
  ● 搜索引擎之间的4个区别
  ● 网站优化基本搜索引擎优化篇
  ● 点评A8音乐商业模式
  ● 5种不可取的网站推广方法
  ● SNS将成四大门户竞争的关键筹码
  ● 企业整站优化的一些技巧
  ● 马化腾创业三问
  ● 站长们每天都要做的工作
   网站优化与排名
  ● 快速提升访问量的方法
  ● 网站优化关键词工具,优化软件,SEO优化工具,SEO优化软件
  ● 总结四点分享我建站失败的经历
  ● 从达人圈到开心人人首谈SNS域名的选择与定位
  ● 良好心态是站长们成功的关键
  ● 浅谈做冷门站的一些心得体会
  ● 小游戏网站经营最重要的是站在用户的角度创新
  ● 关于网站首页打开速度之我见
  ● 谈一次域名解析出错带来的惨痛代价
  ● 我的地方论坛的建站之路经验总结
  ● 千人站长讲座第46期空姐网军哥谈特色社区运营
  ● 浅谈QQ类网站之站长的出路