惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
博客园_首页
M
MIT News - Artificial intelligence
Project Zero
Project Zero
C
CXSECURITY Database RSS Feed - CXSecurity.com
V2EX - 技术
V2EX - 技术
G
Google Developers Blog
H
Hacker News: Front Page
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
GbyAI
GbyAI
C
Cisco Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Simon Willison's Weblog
Simon Willison's Weblog
A
Arctic Wolf
H
Heimdal Security Blog
量子位
小众软件
小众软件
Help Net Security
Help Net Security
博客园 - Franky
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
News | PayPal Newsroom
T
Tor Project blog
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
N
News and Events Feed by Topic
T
Tailwind CSS Blog
Webroot Blog
Webroot Blog
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
The Register - Security
The Register - Security
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
腾讯CDC
P
Palo Alto Networks Blog
S
Secure Thoughts
D
Darknet – Hacking Tools, Hacker News & Cyber Security
TaoSecurity Blog
TaoSecurity Blog
Scott Helme
Scott Helme
T
Tenable Blog
C
Cybersecurity and Infrastructure Security Agency CISA
D
Docker
美团技术团队

博客园 - 莫相会

ASP.NET数据绑定表达式语法 微软Office Live WorkSpace正式向全球用户开放 Google Talk的小徽章Chatback 使用UpdatePanel时脚本错误sys 未定义的解决办法 - 莫相会 - 博客园 用户定义函数建议 SQL SERVER临时表的使用 Active Report for .net"在VS中正常显示在IIS中无法显示"的问题之解决办法 二级联动 SQL匹配 Visual Studio 快捷键收藏 在Source Safe 采用tag 创建服务器控件 XtraGrid如何合并列或横向合并单元格? 关于WebService传输对象数组的问题 SQL Server2000中死锁经验总结 《个人信息管理器》C#源代码下载 sql server数据库定时自动备份 VSS(Visual SourceSafe)使用入门 《设计模式迷你手册》与《C#设计模式》下载
MDI程序中反射生成菜单并与权限控制的结合(利用XML将模块组件装配与卸载)
莫相会 · 2006-10-28 · via 博客园 - 莫相会

思路:
第一步:将程序按模块划分,提供一个接口给这些模块,模块要实现这个接口,将模块封装成组件。
第二步:将组件名、组件中的成员以及权限信息一起写入XML文件。
第三步:在主程序中读取XML文件并结合用户权限判断,再用反射生成菜单。

下面是小例子
首先定义一个接口,然后封装组件

public interface IMdiFunc
{
   
void void MdiParentToolBarOnClick(string st);
}

在将菜单信息和功能写入XML文件dymenu.xml

<?xml version="1.0" encoding="utf-8" ?> 
<ROOT>
<主菜单>主菜单1          
     
<子菜单>打开窗口1</子菜单>              
    
<菜单DLL>MyForms.dll</菜单DLL>             
     
<菜单Func>OpenForm1</菜单Func>
    
<菜单Right>A</菜单Right>             
     
<子菜单>打开窗口2</子菜单>            
     
<菜单DLL>MyForms.dll</菜单DLL>             
     
<菜单Func>OpenForm2</菜单Func>
    
<菜单Right>B</菜单Right>  
 
</主菜单>
 
<主菜单>主菜单2              
     
<子菜单>打开窗口3</子菜单>             
     
<菜单DLL>MyDlls.dll</菜单DLL>
    
<菜单Func>OpenForm3</菜单Func>
    
<菜单Right>C</菜单Right>  
</主菜单>
</ROOT>

在主窗体中考虑权限并用反射创建菜单,这里只是模拟权限控制。

主窗体