设计时获取窗体中所有组件名称
If you are hosting windows forms designer and using DesignerSurface, all components on the form that are visible in design time are accessible through DesignerSurface.ComponentsContainer property:
for (int i = 0; i < surface.ComponentContainer.Components.Count; i++) { Console.WriteLine((i + 1) + ". " + surface.ComponentContainer.Components[i].Site.Name + ": " + surface.ComponentContainer.Components[i].GetType().FullName); }
host.CreateComponent(typeof(Form)); Form frm1 = (Form)Activator.CreateInstance(frmType); Form frm2 = (Form)host.RootComponent; //FieldInfo fi = frmType.GetField("components", BindingFlags.Instance | BindingFlags.NonPublic); //Container cn = null; //if (fi != null) // cn = (Container)fi.GetValue(frm1); //if (cn != null) // foreach (Component cp in cn.Components) // { // host.Container.Add(cp); // ComponentDesigner componentDesigner1 = ((ComponentDesigner)host.GetDesigner(((IComponent)cp))); // if (componentDesigner1 != null) // componentDesigner1.InitializeExistingComponent(((IDictionary)null)); // } FieldInfo[] fis = frmType.GetFields( BindingFlags.Instance | BindingFlags.NonPublic); foreach (FieldInfo f in fis) { object o = f.GetValue(frm1); if (o is Control) continue; if (o is Component) { Component cp = (Component)o; host.Container.Add(cp); ComponentDesigner componentDesigner1 = ((ComponentDesigner)host.GetDesigner(((IComponent)cp))); if (componentDesigner1 != null) componentDesigner1.InitializeExistingComponent(((IDictionary)null)); } }
private void button1_Click(object sender, EventArgs e) { Type t = typeof(Form1); object frm = Activator.CreateInstance(t); FieldInfo field = t.GetField("components", BindingFlags.Instance | BindingFlags.NonPublic); if (field != null) { IContainer componentsContainer = field.GetValue(frm) as IContainer; if (componentsContainer != null) { // access components ny name, by index, in a loop ... for (int i = 0; i < componentsContainer.Components.Count; i++) { Console.WriteLine(i + ". component: " + componentsContainer.Components[i].GetType().FullName); } } } }
Regards,
vladimir

浙公网安备 33010602011771号