Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 上下文菜单项和子项_C#_Winforms - Fatal编程技术网

C# 上下文菜单项和子项

C# 上下文菜单项和子项,c#,winforms,C#,Winforms,我在表单中有一个ContextMenuStrip 出于某种原因,我想同时更改上下文菜单的所有项。所以我写了这段和平的代码: int a = 0; foreach (ToolStripItem co in contextMenuStrip1.Items) { co.Text = "Menu" + a.ToString(); a++; } 但是,尽管主项成功地更改了,子项却没有更改 那么我怎样才能访问这些子项呢 PS:我不能添加图片,因为我是新加入这个论坛的,我想知道我

我在表单中有一个ContextMenuStrip

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

int a = 0; 

foreach (ToolStripItem co in contextMenuStrip1.Items)  
{     
 co.Text = "Menu" + a.ToString();
  a++;
  }
但是,尽管主项成功地更改了,子项却没有更改 那么我怎样才能访问这些子项呢

PS:我不能添加图片,因为我是新加入这个论坛的,我想知道我的意思,我希望你明白我的意思


谢谢

由于根据MSDN,ToolStripButton、ToolStripLabel、ToolStripSeparator、ToolStripControlHost、ToolStripDropDownItem、ToolStripStatusLabel确实继承自ToolStripItem,因此您可以尝试使用as运算符强制转换,然后设置其文本属性


希望这就是你的要求

由于根据MSDN,ToolStripButton、ToolStripLabel、ToolStripSeparator、ToolStripControlHost、ToolStripDropDownItem、ToolStripStatusLabel确实继承自ToolStripItem,因此您可以尝试使用as运算符强制转换,然后设置其文本属性


希望这就是你的要求

您需要强制转换到
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);

您需要强制转换到
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);


你需要一个递归函数。我不明白。。。你有一个用鼠标右键打开的ContextMenu,还是有一个通常位于窗口上部的工具栏?因为您使用了两个不同的术语。将图像放在某个位置,并在此处获取链接。@dowhilefor-快速搜索
ContextMenuStrip
会发现它,它的一个祖先类型是
ToolStrip
。我在这篇文章的任何地方都没有看到工具栏。你需要一个递归函数。我不明白。。。你有一个用鼠标右键打开的ContextMenu,还是有一个通常位于窗口上部的工具栏?因为您使用了两个不同的术语。将图像放在某个位置,并在此处获取链接。@dowhilefor-快速搜索
ContextMenuStrip
会发现它,它的一个祖先类型是
ToolStrip
。我在这篇文章的任何地方都没有看到工具栏。我会详细地告诉你:我想在运行时更改语言(区域性)。除ContextMenuStrip、MenuStrip和ToolStrip外,所有控件都会更改其名称。我也找到了一种方法来更改这三个项目的名称,但只更改主项目,而不更改子项目。所有包含子项目的项目都是ToolStripDropDownItem。看看我的答案。是的,萨米奇在谈论我所做的事情!foreach(contextMenuStrip1.Items中的ToolStripItem co)//menu.Items){string text=resourcesss.GetString(co.Name+“.text”,cult);if(text!=null){co.text=text;}}}}。如何重写此代码以访问ToolStripDropDownItem?(co作为ToolStripDropDownItem)。DropDownItems将获取子项。然后对其进行调试,查看其获取的项目。正如Samich所说,递归迭代。我将详细告诉您:我希望在运行时更改语言(文化)。除ContextMenuStrip、MenuStrip和ToolStrip外,所有控件都会更改其名称。我也找到了一种方法来更改这三个项目的名称,但只更改主项目,而不更改子项目。所有包含子项目的项目都是ToolStripDropDownItem。看看我的答案。是的,萨米奇在谈论我所做的事情!foreach(contextMenuStrip1.Items中的ToolStripItem co)//menu.Items){string text=resourcesss.GetString(co.Name+“.text”,cult);if(text!=null){co.text=text;}}}}。如何重写此代码以访问ToolStripDropDownItem?(co作为ToolStripDropDownItem)。DropDownItems将获取子项。然后对其进行调试,查看其获取的项目。正如Samich所说,递归迭代。没有co.Items=)我第一手考虑过,但这只是一个错误的假设。没有co.Items=)我第一手考虑过,但这只是一个错误的假设。谢谢你的回答,它似乎起作用了,让我研究一下,然后我会再次发布反馈。是的,它起作用了,非常感谢,ToolStrip有一些问题,但我正在解决。当我再次陷入困境时,我会发回。谢谢你的回答,它似乎正在工作,让我工作一段时间,然后我会再次发回以获得反馈。是的,它工作了,非常感谢,我在ToolStrip上有一些问题,但我正在工作。当我再次陷入困境时,我会发回邮件。