コントロール
次のクラスをプロジェクトに追加します。
public static class ControlExtensionMethods
{
public static IEnumerable<Control> GetOffsprings(this Control @this)
{
foreach (Control child in @this.Controls)
{
yield return child;
foreach (var offspring in GetOffsprings(child))
yield return offspring;
}
}
}
呼び出し元のすべてのサブコントロールを返します。
var offsprings = this.GetOffsprings();
ループで使用できます。
foreach (Control c in this.GetOffsprings())
{
// Do action
}
メニュー項目
次のクラスをプロジェクトに追加します。
public static class MenuStripExtensionMethods
{
public static IEnumerable<ToolStripItem> GetSubItems(this ToolStrip @this)
{
foreach (ToolStripItem child in @this.Items)
{
yield return child;
foreach (var offspring in child.GetSubItems())
yield return offspring;
}
}
public static IEnumerable<ToolStripItem> GetSubItems(this ToolStripItem @this)
{
if (!(@this is ToolStripDropDownItem))
yield break;
foreach (ToolStripItem child in ((ToolStripDropDownItem) @this).DropDownItems)
{
yield return child;
foreach (var offspring in child.GetSubItems())
yield return offspring;
}
}
}
呼び出し元のすべてのサブメニュー項目が返されます。
var allMenuItems = this.menuStrip1.GetSubItems()