<转>通过反射获取Form/MenuStrip/ContextMenuStrip等列表

private void button1_Click(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
Assembly a = Assembly.LoadFile(Application.ExecutablePath);
Type[] types = a.GetTypes();
foreach (Type t in types)
{
if (t.BaseType.Name == "Form") //遍历窗体
{
Form f = (Form)Activator.CreateInstance(t, true);
if (f != null)
{
TreeNode node = new TreeNode();
node.Name = f.Name;
node.Text = f.Text;
treeView1.Nodes.Add(node);
FindControl(f, node); //根据窗体遍历菜单栏及工具栏
Form fm=(Form)f;
FindContextControl(fm, node); //根据窗体遍历弹出式菜单
}
}
}
} //遍历弹出式菜单
public void FindContextControl(Form f, TreeNode pcnode)
{
System.Reflection.FieldInfo[] fieldinfo = f.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
for (int i = 0; i < fieldinfo.Length; i++)
{
switch (fieldinfo[i].FieldType.Name)
{
case "ContextMenuStrip":
ContextMenuStrip context = (ContextMenuStrip)fieldinfo[i].GetValue(f);
foreach (ToolStripMenuItem tsmi in context.Items)
{
TreeNode tsminode = new TreeNode();
tsminode.Name = tsmi.Name;
tsminode.Text = tsmi.Text;
pcnode.Nodes.Add(tsminode);
}
break;
default:
break;
}
}
}
public void FindControl(Control ctrl, TreeNode Pnode)
{
foreach (Control c in ctrl.Controls)
{
if (c is MenuStrip) //遍历菜单栏
{
MenuStrip menu = (MenuStrip)c;
foreach (ToolStripMenuItem menuitem2 in menu.Items)
{
TreeNode cnode = new TreeNode();
cnode.Name = menuitem2.Name;
cnode.Text = menuitem2.Text;
if (menuitem2.DropDownItems.Count > 0)
{
for (int i = 0; i < menuitem2.DropDownItems.Count; i++)
{
TreeNode tnode = new TreeNode();
tnode.Name = menuitem2.DropDownItems[i].Name;
tnode.Text = menuitem2.DropDownItems[i].Text;
cnode.Nodes.Add(tnode);
}
}
Pnode.Nodes.Add(cnode);
}
}
else if (c is ToolStrip) //遍历工具栏
{
ToolStrip tool = (ToolStrip)c;
foreach (ToolStripItem item in tool.Items)
{
if (item is ToolStripButton)
{
TreeNode ttnode = new TreeNode();
ttnode.Name = item.Name;
ttnode.Text = item.Text;
Pnode.Nodes.Add(ttnode);
}
else if (item is ToolStripDropDownButton )
{
ToolStripDropDownButton tdb = (ToolStripDropDownButton)item;
TreeNode twnode = new TreeNode();
twnode.Name = tdb.Name;
twnode.Text = tdb.Text;
if (tdb.DropDownItems.Count > 0)
{
for (int i = 0; i < tdb.DropDownItems.Count; i++)
{
TreeNode tn = new TreeNode();
tn.Name = tdb.DropDownItems[i].Name;
tn.Text = tdb.DropDownItems[i].Text;
twnode.Nodes.Add(tn);
}
}
Pnode.Nodes.Add(twnode);
}
}
}
}
}

转自:http://liujb1982.blog.163.com/blog/static/114911572201011162327637/

上一篇:第二节 安装CentOS


下一篇:python中的 uuid 模块使用示例