日期:2014-05-18  浏览次数:20787 次

应用程序加载dl中的窗体,并将该窗体放在主程序的panel中(有挑战性,高手请进)
需求如下:
有一个应用程序,应用程序窗体有一个panel容器;有一个dll,该dll中有一个窗体。
问题:
如何将该dll中的窗体在panel中显示,并且该没有窗体的外形,例如最大化,最小化,也没有窗体框框!!

我做了部分实现:

Assembly assembly = Assembly.LoadFrom("..\\..\\Debug\\Plugins\\GeoMedia_CL.dll");
Type[] types = assembly.GetTypes();
foreach (Type t in types)
{
  if (t.BaseType == typeof(Form))
  {
  Object obj = Activator.CreateInstance(t);
  //t.InvokeMember("MdiParent", BindingFlags.SetProperty, null, obj, new object[] { this });
  t.InvokeMember("Text", BindingFlags.SetProperty, null, obj, new object[] { t.FullName + " 窗体:" });
  t.InvokeMember("Show", BindingFlags.InvokeMethod, null, obj, new object[] { });
  }
}
但是有问题,不清楚InvokeMember如何用,同时不知道如何放在panel中,希望大侠给例子详细说明!!


------解决方案--------------------
你的DLL也是用C#写的吗? 如果那可以在加载DLL的那个程序代码中加入DLL的命名空间,直接 new 一个DLL中的窗体出来吧,再要把这个窗体加入到本窗体的panel中,应该只要把newForm.Parent = Panel 应该就可以了。
类似以下代码
 MyDLL.ChooseItemFrm CItemFrm = new MyDLL.ChooseItemFrm();
 CItemFrm.Parent = panel;