public static class DynamicCreate
{
/**/
/// <summary>
/// 创建form实例。
/// </summary>
/// <param name="formName">form的类名</param>
public static void CreateFormInstance(string mDllFileName, string mNameSpace,string mClassName,string mFormName, MainForm MainForms)
{
bool flag = false;
//遍历主窗口上的所有子菜单
for (int i = 0; i < MainForms.MdiChildren.Length; i++)
{
//如果所点的窗口被打开则重新激活
if (MainForms.MdiChildren[i].Name.ToString().ToLower() == mClassName.ToLower())
{
MainForms.MdiChildren[i].Activate();
MainForms.MdiChildren[i].Show();
MainForms.MdiChildren[i].WindowState = FormWindowState.Normal;
flag = true;
break;
}
}
if (!flag)
{
DllInvoke(mDllFileName, mNameSpace, mFormName, null, mNameSpace + "." + mClassName, MainForms.dockPanel);
}
}
public static object DllInvoke(string mDllFileName, string mNameSpace, string mClassName, object[] mObjArrayParams, string FillName, DockPanel Mdiparent)
{
try
{
char[] SplitF = ":".ToCharArray();
Assembly mAssembly = Assembly.LoadFrom(mDllFileName);
Type[] mTypes = mAssembly.GetTypes();
foreach (Type mType in mTypes)
{
// 查找要调用的命名空间及类
if (mType.Namespace == mNameSpace && mType.Name == mClassName)
{
object mObject = Activator.CreateInstance(mType);
DockContent newForms = new DockContent();
newForms = (DockContent)mObject;
if (Mdiparent.Contents.Count > 12)
{
return (object)0;
}
for (int i = 1; i < Mdiparent.Contents.Count; i++)
{
if (Mdiparent.Contents[i].ToString().Split(SplitF)[1].ToString().Trim() == newForms.Text)
{
MessageBox.Show("此窗口已经打开!");
return (object)0;
}
}
newForms.Show(Mdiparent);
}
}
}
catch (Exception mEx)
{
MessageBox.Show(mEx.Message);
}
return (object)0;
}
}