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

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - 莫相会

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>

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

主窗体