迭代menustrip dropdownitem

时间:2017-10-22 19:41:57

标签: c# .net winforms

如何遍历/\d\D+(?=ANS)/gm 中的所有ToolStripMenuItem MenuStrip

MenuStrip

如果con.connection3.Open(); string query = "SELECT * FROM tblrole WHERE role = ?role"; using (MySqlCommand cmd3 = new MySqlCommand(query,con.connection3)) { cmd3.Parameters.AddWithValue("?role", roled); using (MySqlDataReader mdr = cmd3.ExecuteReader()) { while (mdr.Read()) { for (int o = 0, i = 2; o < fileMaintenanceToolStripMenuItem.DropDownItems.Count; o++, i++) { fileMaintenanceToolStripMenuItem.DropDownItems[o].Visible = mdr.GetBoolean(i); } for (int o = 0, i = 19; o < transactionToolStripMenuItem.DropDownItems.Count; o++, i++) { transactionToolStripMenuItem.DropDownItems[o].Visible = mdr.GetBoolean(i); } for (int o = 0, i = 45; o < reportsToolStripMenuItem.DropDownItems.Count; o++, i++) { reportsToolStripMenuItem.DropDownItems[o].Visible = mdr.GetBoolean(i); } for (int o = 0, i = 55; o < utilitiesToolStripMenuItem.DropDownItems.Count; o++, i++) { utilitiesToolStripMenuItem.DropDownItems[o].Visible = mdr.GetBoolean(i); } if (!fileMaintenanceToolStripMenuItem.HasDropDownItems)fileMaintenanceToolStripMenuItem.Visible = false; else fileMaintenanceToolStripMenuItem.Visible = true; if (!transactionToolStripMenuItem.HasDropDownItems)transactionToolStripMenuItem.Visible = false; else transactionToolStripMenuItem.Visible = true; if (!reportsToolStripMenuItem.HasDropDownItems)reportsToolStripMenuItem.Visible = false; else reportsToolStripMenuItem.Visible = true; if (!utilitiesToolStripMenuItem.HasDropDownItems) utilitiesToolStripMenuItem.Visible = false; else utilitiesToolStripMenuItem.Visible = true; } } } con.connection3.Close(); 没有子项,但我需要遍历它们,那么工作正常

1 个答案:

答案 0 :(得分:1)

您可以使用递归方法作为遍历树结构的良好选项。您可以使用extension method列出给定ToolStripMenuItem的{​​{1}}个后代:

ToolStripMenuItem

它会将using System.Collections.Generic; using System.Linq; using System.Windows.Forms; public static class ToolStripMenuItemExtensions { public static List<ToolStripMenuItem> Descendants(this ToolStripMenuItem item) { var items = item.DropDownItems.OfType<ToolStripMenuItem>().ToList(); return items.SelectMany(x => Descendants(x)).Concat(items).ToList(); } } 添加到Descendants元素,因此您可以这样使用它:

ToolStripMenuItem