我做了一个主窗体Main,我想通过类在main上显示控件,例如:在main中调用类A船体上就会显示按钮,调用类B窗体上就会显示文本框。问题是我现在不知道将要调用哪个类,类的名字都写在一个配置文件中,我可以从配置文件中读取出类的名字,然后调用。
请各位大哥给小弟指点指点。

解决方案 »

  1.   

    Activator.Create("FormA.dll", "FormA.MyForm1");
      

  2.   

    公司的人告诉我用程序集(assembly),具体怎么用它也不知道。请大家指点一下
      

  3.   

    使用反射啊
    //read config file to get assembly name and class name(need contain namespace)
    [C#]
    public static ObjectHandle CreateInstance(
       string assemblyName,
       string typeName
    );
      

  4.   

    用Activator.CreateInstance 动态创建对象
      

  5.   

    或者还可以使用Assembly.CreateInstance 方法:public object CreateInstance(
       string typeName
    );查msdn吧
      

  6.   

    http://blog.csdn.net/veryhappy/archive/2005/11/23/535767.aspx
      

  7.   

    //加载控件(文件名用你需要加载的控件类所在文件")
    Assembly assembly = Assembly.LoadFrom(@"Panpipe.Test.exe");

    //获得类(型)
    Type type = assembly.GetType("Panpipe.Test.LoginControl",false,true);
    //设置筛选标志
    BindingFlags bflags = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
    //调用构造函数并获得对象
    Object obj = type.InvokeMember("Panpipe.Test.LoginControl", bflags | BindingFlags.CreateInstance, null, null, null);
    //将对象转换类型
    System.Windows.Forms.Control c = (Control)obj;
    //指定位置
    c.Location = new System.Drawing.Point(272, 192);

    //将控件添加到窗体
    this.Controls.Add(c);
      

  8.   


    公司的人告诉你的是对的
    用反射
    查查msdn有现成的例子
      

  9.   

    我用下面的方法加载了一个dll文件:
    Assembly SampleAssembly;
    SamplyAssembly = Assembly.LoadFrom(@"F:\btn.dll");
    MethodInfo Method = SamplyAssembly.GetType()[0].GetMethod("ShowBtn");//ShowBtn是btn中的一个方法,需要一个参数:Button bt我现在应该怎样调用这个方法呢?
      

  10.   

    我的只需要调用一下btn.dll中的ShowBtn方法就可以将控件显示出来
      

  11.   

    怎么样了?给你简单点的代码
    object[] myarray=new object[1];
    myarray[0]=(object)(bt);
    Assembly ass=Assembly.LoadFrom(@"F:\btn.dll");

    object oo=ass.CreateInstance("类名"); Type mytype=oo.GetType();
    MethodInfo mi=mytype.GetMethod("ShowBtn");
    mi.Invoke(oo,myarray);
      

  12.   

    反射:
    (类名称)Assembly.Load(类名称).CreateInstance(构造函数名称, false);
    这样将获得一个前面括号内的类实例~!
      

  13.   

    使用反射生成一个窗体:
    private void button1_Click(object sender, System.EventArgs e)
    {
    Assembly assm = Assembly.LoadFrom("e:\\WindowsApplication.dll");
    Type TypeToLoad= assm.GetType("WindowsApplication.Form1");

    object obj;
    obj = Activator.CreateInstance(TypeToLoad);
    Form formToShow = null;
    formToShow = (Form)obj;
    formToShow.Show();

    }