通过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迭代[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# 最有用的(自定义)代码片段是啥? [关闭]

有人可以解释以下 R 代码片段吗? [关闭]

有没有办法关闭代码片段中的命名建议?

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

解决方案电影标题中缺少代码的片段,完成挑战更多[关闭]

我该如何做模态对话框片段(代码在我关闭之前不会执行)