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