上下文菜单项和子项

本文关键字:菜单项 上下文 | 更新日期: 2023-09-27 18:07:14

我在表单中有一个ContextMenuStrip。

由于某种原因,我想同时更改上下文菜单的所有项。所以我写了这样的代码:

int a = 0; 
foreach (ToolStripItem co in contextMenuStrip1.Items)  
{     
 co.Text = "Menu" + a.ToString();
  a++;
  }

但是,虽然主项更改成功,但子项没有更改那么我怎样才能访问这些子项呢?

PS:我不能添加图像,因为我是新到这个论坛看到我的意思,我希望你得到的想法。

谢谢!

上下文菜单项和子项

您需要强制转换为ToolStripDropDownItem并检查DropDownItems属性。当然,还要递归地更新它。

示例如下:

public void ChangeMenuItemsNames(ToolStripItemCollection collection)
    {
        foreach (ToolStripMenuItem item in collection)
        {
            item.Name = "New Name";
            if (item is ToolStripDropDownItem)
            {
                ToolStripDropDownItem dropDownItem = (ToolStripDropDownItem)item;
                if (dropDownItem.DropDownItems.Count > 0)
                {
                    this.ChangeMenuItemsNames(dropDownItem.DropDownItems);
                }
            }
        }
    }

如何使用:

   this.ChangeMenuItemsNames(this.contextMenuStrip1.Items);

因为根据MSDN, ToolStripButton,ToolStripLabel,ToolStripSeparator,ToolStripControlHost,ToolStripDropDownItem,ToolStripStatusLabel都继承自ToolStripItem,你可以尝试铸造作为操作符,然后设置其文本属性以及

希望这是你想要的。

  void ChangeName(ToolStripItemCollection collection, ref int a)
    {
        foreach (ToolStripItem co in collection)
        {
            co.Text = "Menu" + a.ToString();
            a++;
            if (co is ToolStripDropDownItem)
            {
                ToolStripDropDownItem ts = co as ToolStripDropDownItem;
                if (ts.DropDownItems != null) ChangeName(ts.DropDownItems, ref a);
            }
        }
    }