日期:2014-05-20  浏览次数:21100 次

如何在C#中实现菜单数组
在VB中子菜单可以用相同的Name,然后通过索引来调用,但如何在C#中实现呢?
有其他好的办法能实现用索引调用菜单也行,十分感谢你的高见!!!!!!!

------解决方案--------------------
象VB里面那样的数组控件怕什么语言也比不上VB的方便了...
.Net里面可以把控件按钮做成数组,不过必须手工写代码
例如:
Button[] myButtons = new button[30];
for(int i=0;i <myButtons.Length;i++)
{
myButtons[i] = new Button();
//..............
//代码从IDE自动生成里抄一些
this.Controls.Add(myButtons[i]);
}
------解决方案--------------------
看看下面菜单结构:
//mainMenu1的子菜单
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItemF1_1,
this.menuItemF1_2,
this.menuItemF1_3,
this.menuItemF1_4,
this.menuItemF1_5});

//
// menuItemF1_1
//
//menuItemF1_1 的子菜单
this.menuItemF1_1.Index = 0;
this.menuItemF1_1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItemF1_1_1,
this.menuItemF1_1_2});

-----------------------------------------
所以每个menuitem都有可能有子菜单,用递归的方式找出每个不为不是父菜单的menuitem。然后针对 不是父菜单的menuitem 项判断是否是你需要的菜单项。
private void Fun(MenuItem m)
{
if(m.IsParent)
{
foreach(MenuItem mm in m.MenuItems)
{
Fun(mm);
}
}
else
{
//在这里实现要的操作
//比如:m.PerformClick(); 出发click事件。
Console.WriteLine(m.Text);
}
}
//---------------------
foreach(MenuItem mam in this.mainMenu1.MenuItems)
{
Fun(mam);
}