Winform 窗口加载实例(一)-----MenuStrip

本文介绍了如何在Winform应用程序中动态加载MenuStrip菜单,包括数据库设计、菜单加载和菜单与窗口结合的实现方法。通过递归加载数据并利用反射及委托实现菜单项的点击事件,动态展示不同用户权限的功能。
摘要由CSDN通过智能技术生成

       在开发软件的时候,常常会遇到这样的功能要求,根据不同的用户权限加载不同的功能界面。这样就需要我们在设计软件的时候动态添加添加功能。当然也可以把所有的功能都列出来,在根据权限来显示和隐藏功能,虽然这样也可以满足需求,但是需要很多额外的编码,性能上也可能大打折扣。

      在WinForm编程中,MDI是一种很常用的结构。由于Windows界面的影响,很多时候我们设计软件的时候都喜欢上菜单下界面的模式。下面就结合代码来实现动态添加MenuStrip。

       动态添加MenuStrip主要要解决三个方面的问题:

      1、数据库设计

      2、MenuStrip菜单的加载

      3、菜单和窗口的结合

      首先来解决数据库的设计问题。

      一个窗口显示给用户看到的一般就是一个名称。另外菜单可能有级数,级数的解决一般有两种:根据编号来区分,设置父菜单。我喜欢根据编号来区分。比如:000 代表父菜单 000001代表一级菜单......如此类推。

      数据库里面存储模块表的结构一般是 sBoardID  sBoardName   sFile  sForm  sMethod

      sBoardID  菜单编号 

      sBoardName 菜单名称

      sFile 菜单Form所在的文件(exe或者dll)

      sForm  菜单对应的Form

      sMethod 菜单对应的要执行的方法(有的菜单只有功能,没有界面,比如“退出系统”,“重新登录”)

      其次来看看MenuStrip菜单的加载

      因为菜单可能有多级,所以需要循环加递归来完成加载。会在下面的代码里面说明。

      最后来看看菜单和窗口的结合

      在数据库中,我们存储的都是字符串,而在程序中,我们却需要显示对应的窗口,这样就要求我们根据字符串来实例化对象。在.net里面我们可以用反射来实现。

      上面说了,有些菜单只执行方法而没有界面,同样的数据库中存储的也只是字符串类型的方法名称,这样就要求我们根据字符串方法名执行对应的方法,自然而然的我们就会想到委托。

      以上的问题都解决了,下面我们来看看代码:

     menuMain是一个MenuStrip控件

     private delegate void dlRunMethod();//定义一个委托,用于执行方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值