string strDllName = item.Tag.ToString().Trim().Substring(0, item.Tag.ToString().Trim().IndexOf("*"));
string strFrmName =item.Tag.ToString().Trim().Substring(item.Tag.ToString().Trim().IndexOf("*") +1,item.Tag.ToString().Trim().Length- item.Tag.ToString().Trim().IndexOf("*")-1) ;
try
{
object obj = Assembly.LoadFrom(strDllName + ".DLL").CreateInstance(strDllName.Substring(0, strDllName.Length - 3) + "." + strFrmName);
if (obj != null)
{
if (((frmMain)GetTopParent(this)).DockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{
((DockContent)obj).MdiParent = (frmMain)GetTopParent(this);
((DockContent)obj).Show();
}
else
{
for (int i = 0; i < this.DockPanel.Contents.Count; i++)
{
if (this.DockPanel.Contents[i].GetType().ToString() == obj.GetType().ToString() )
{
this.DockPanel.ActiveDocumentPane.ActiveContent = (DockContent)this.DockPanel.Contents[i]; //已经打开则击活
return;
}
}
((DockContent)obj).Show(((frmMain)GetTopParent(this)).DockPanel);
}
}
本文介绍了一种使用 C# 动态加载 DLL 和实例化窗体的方法。通过解析字符串标签来获取 DLL 名称和窗体名称,进而实现不同窗体的动态加载。文中详细展示了如何处理 Mdi 窗口和其他类型的 Dock 内容,并确保了已打开的窗体会被激活。
3352

被折叠的 条评论
为什么被折叠?



