c#中如何动态添加菜单项并实现其点击?

c#中如何动态添加菜单项并实现其点击?,第1张

从数据库读取出来菜单列表这点不用说了吧。最主要的就是给读取出来的菜单加上单击事件,可以用下面的方法实现。#region

绑定菜单信息

XmlDocument

xmlDoc

=

new

XmlDocument()

xmlDoc.Load(Application.StartupPath

+

"\\config.xml")

XmlElement

XmlRoot

=

xmlDoc.DocumentElement

XmlNodeList

xmlNodeList

xmlNodeList

=

XmlRoot.SelectNodes("SQLCommand")

if

(xmlNodeList.Count

>

0)

{

Menu_Command.Items.Clear()//Menu_Command是一个System.Windows.Forms.ContextMenuStrip

Menu_Command.Items.Add("命令管理",

null,

new

EventHandler(命令管理ToolStripMenuItem_Click))//命令管理ToolStripMenuItem_Click是一个单击事件函数

ToolStripSeparator

tss1

=

new

ToolStripSeparator()

Menu_Command.Items.Add(tss1)

foreach

(XmlNode

xmlNode

in

xmlNodeList)

{

Menu_Command.Items.Add(xmlNode.FirstChild.InnerText,

null,

new

EventHandler(Menu_Command_Click))//添加单击事件。Menu_Command_Click是个单击函数事件

}

}

#endregion

pDocTemplate = new CSingleDocTemplate(

IDR_MAINFRAME,

RUNTIME_CLASS(CMyScrollViewDoc),

RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口

RUNTIME_CLASS(CMyScrollViewView))这个函数将文档类视类和框架类结合在一起,这个是单文档的组织形式,所以在单文档中框架类始终没有改变,所以可以动态加载菜单;

pDocTemplate = new CMultiDocTemplate(IDR_questionTYPE,

RUNTIME_CLASS(CquestionDoc),

RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架

RUNTIME_CLASS(CquestionView))而这个是多文档的组织形式,可以看到第三个参数变成了CChildFrame,而不是CMainFrame,第一个参数也有所改变看,所以每新建一个多文档就会对应一个CChildFrame,所以动态添加的菜单不会显示在CMainFrame上,多文档不共用框架类


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11803927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存