下面的示例创建一个 MainMenu,向 MainMenu 分配两个 MenuItem 对象,并将它绑定到一个窗体上。此示例假定已经创建名为 Form1 的 Form。
[Visual Basic]
Public Sub CreateMyMainMenu()
' Create an empty MainMenu.
Dim mainMenu1 As New MainMenu()
Dim menuItem1 As New MenuItem()
Dim menuItem2 As New MenuItem()
menuItem1.Text = "File"
menuItem2.Text = "Edit"
' Add two MenuItem objects to the MainMenu.
mainMenu1.MenuItems.Add(menuItem1)
mainMenu1.MenuItems.Add(menuItem2)
' Bind the MainMenu to Form1.
Menu = mainMenu1
End Sub
[C#]
public void CreateMyMainMenu()
{
// Create an empty MainMenu.
MainMenu mainMenu1 = new MainMenu(); MenuItem menuItem1 = new MenuItem();
MenuItem menuItem2 = new MenuItem(); menuItem1.Text = "File";
menuItem2.Text = "Edit";
// Add two MenuItem objects to the MainMenu.
mainMenu1.MenuItems.Add(menuItem1);
mainMenu1.MenuItems.Add(menuItem2);
// Bind the MainMenu to Form1.
Menu = mainMenu1;
}
[Visual Basic]
Public Sub CreateMyMainMenu()
' Create an empty MainMenu.
Dim mainMenu1 As New MainMenu()
Dim menuItem1 As New MenuItem()
Dim menuItem2 As New MenuItem()
menuItem1.Text = "File"
menuItem2.Text = "Edit"
' Add two MenuItem objects to the MainMenu.
mainMenu1.MenuItems.Add(menuItem1)
mainMenu1.MenuItems.Add(menuItem2)
' Bind the MainMenu to Form1.
Menu = mainMenu1
End Sub
[C#]
public void CreateMyMainMenu()
{
// Create an empty MainMenu.
MainMenu mainMenu1 = new MainMenu(); MenuItem menuItem1 = new MenuItem();
MenuItem menuItem2 = new MenuItem(); menuItem1.Text = "File";
menuItem2.Text = "Edit";
// Add two MenuItem objects to the MainMenu.
mainMenu1.MenuItems.Add(menuItem1);
mainMenu1.MenuItems.Add(menuItem2);
// Bind the MainMenu to Form1.
Menu = mainMenu1;
}
解决方案 »
- 取出webBrowser中的html代码?
- [文件]菜单指定ImageIndex能显示ImageList中的菜单,为什么文件下面的菜单显示不了?
- datarow 的行状态 与操作的关系
- 关于用c#.net进行csv输出
- if(3) 是什么意思
- 请问 .net 下有没有 des 算法和 md5 算法的类?
- 关于listview的显示问题!!!请教!!
- 类似outlook界面,如何切换其右边的显示内容?
- 大家帮我看看这个问题
- 问在.net下调用非.net环境下开发的组件
- winForm里的treeView事件问题。
- 100求教:将win模式写的.dll放在.aspx中,在本机上能正常运行,为什么在网络中另一机器上无法运行?求解决之道
{
shangjcdmc=this.main_menu.MenuItems[i].Text;
for(int b=0;b<this.main_menu.MenuItems[i].MenuItems.Count;b++)
{
//menutext
menutext=this.main_menu.MenuItems[i].MenuItems[b].Text;
}
}
利用这个读取每个菜单,然后与较数据库中菜单比较,在利用this.main_menu.MenuItems[i].MenuItems[b].visible属性控制它是否可见。就行了。
{
myMenuItem mnuItem=new myMenuItem ();
mnuItem.Path = drItem["MenuPath"].ToString ();
mnuItem.MenuName = drItem["MenuName"].ToString ();
mnuItem.Text = drItem["Text"].ToString ();
mnuItem.Description = drItem["Description"].ToString ();
mnuItem.Checked = System.Convert.ToBoolean (drItem["Checked"]);
...
mnuItem.Visible = System.Convert.ToBoolean (drItem["Visible"]);
mnuItem.ShowDialog = System.Convert.ToBoolean (drItem["ShowDialog"]);
mnuItem.Call = drItem["Call"].ToString (); //据字符串进行功能调用
mnuItem.Click +=new EventHandler(mnuItem_Click);
mnuItem.Select+=new EventHandler(mnuItem_Select);
mnuItem.Args =eval.Evaluate (mnuItem.MenuName ) as object []; //调用参数
AddMenuItem(mnuItem.Path.Split ('.'),mnuItem); //据菜单路径添加到主菜单
}private void mnuItem_Click(object sender, EventArgs e)
{
myMenuItem mnu=(sender as myMenuItem );
Call(mnu.Name,mnu.Call,mnu.Args); //所有菜单集中到这里调用
}
private void mnuItem_Select(object sender, EventArgs e)
{
myMenuItem mnu=(sender as myMenuItem );
this.statusBar1.Panels [0].Text =mnu.Description ;
}
这样你可以加载菜单并进行所有设置,并集中处理
如果不能做到将菜单要调用的功能和参数也放在数据库里的话,
那当然可在mnuItem_Click事件中用switch (mnu.Name)解决偶在数据表保存菜单的格式:
MenuPath: 00.09.02 //是各级的索引来的
Name和Text: 报价成本分析 //多数情况下是相同的
.... //简单的略了
Call: 程序集名\命名空间\<public >(Void) frm报价单() //后面的是一个类的构造函数,这可以通过反射自动生成来填写此栏,当然也可用反射结合参数一起调用.
Args: //这一栏内容就是一个C#的数组声明,例如:new object[] {"ds报价单",1,new string [] {"ds报价单.报价单","ds报价单.报价单明细",".交易方式",".送货方式",".加工类别",".单位",".客户资料"},""} (偶的报价单的一个构造函数需要传入数据集名和使用到的表名)
新建(00)
打开(01)
..
导出(09)
导出为Excel(01)
导出为Text (02)