通过MenuStrips迭代[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过MenuStrips迭代[关闭]相关的知识,希望对你有一定的参考价值。
我找到了迭代menustrip项目的答案,但没有运气通过menuStrips迭代(假设我在表单中有一些contextMenuStrip)。
foreach(Control c in this.Controls)
{
if(c is ContextMenuStrip)
{
// This doesn't work. I figured out contextmenustrips are not
// holding in this.Controls
}
}
答案
如果您需要使用任何表单,您需要使用反射访问它的私有字段。因为ContextMenuStrip是私有成员。这是一种适用于任何给定形式的方法:
private IEnumerable<ContextMenuStrip> EnumerateContextMenus(Form form)
{
const BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance;
var fields = form.GetType().GetFields(bindingFlags);
return fields
.Where(x => x.FieldType == typeof(ContextMenuStrip))
.Select(x => x.GetValue(form) as ContextMenuStrip);
}
另一答案
foreach(var ctrl in this.components.Components)
{
if (ctrl is ContextMenuStrip ctx)
{
MessageBox.Show(ctx.GetType().Name);
}
}
另一答案
ContextMenuStrips是组件的一部分,而不是控件。
foreach(var c in components.Components)
{
if(c is ContextMenuStrip)
{
}
}
要么
ContextMenuStrip cStrip = null;
foreach(var c in components.Components)
{
cStrip = c as ContextMenuStrip;
if(cStrip!=null)
{
}
}
以上是关于通过MenuStrips迭代[关闭]的主要内容,如果未能解决你的问题,请参考以下文章