上下文菜单项和子项

时间:2011-09-02 09:57:39

标签: c# winforms

我在表单中有一个ContextMenuStrip。

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

int a = 0; 

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:4)

您需要转发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);

答案 1 :(得分:0)

由于根据MSDN,ToolStripButton,ToolStripLabel,ToolStripSeparator,ToolStripControlHost,ToolStripDropDownItem,ToolStripStatusLabel继承自ToolStripItem,您可以尝试使用as运算符进行转换,然后设置其text属性。

希望这是你的要求。

答案 2 :(得分:0)

  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);
            }
        }
    }