听朋友说动态加载窗体的方式很不错,今天试了下,原来专业术语叫反射.又张见识了,嘿嘿!
![](https://p-blog.csdn.net/images/p_blog_csdn_net/zhusimu/form1.bmp)
代码如下:
//
通过程序集动态加载窗体
//
解决方案名称"动态加载窗体",包含两个项目:WindowsApplication1,WindowsApplication2.
//
WindowsApplication1项目中,包含窗体Form1和Form2,Form1中有两个Button:button1,button2并有单击事件.
//
WindowsApplication2项目中无改动.
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
此事件显示当前项目(WindowsApplication1)中窗体Form2
private
void
button1_Click(
object
sender, EventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
//路径表示要调用的程序集所在路径,可以是窗体生成的*.exe文件或者*.dll文件
string path = Application.StartupPath + @"WindowsApplication1.exe";
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Form from2 = null;
//WindowsApplication2.Form1表示命名空间WindowsApplication1下的窗体Form2
from2 = (Form)Activator.CreateInstance(Assembly.LoadFile(path).GetType("WindowsApplication1.Form2", false), true);
from2.Show();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
此事件显示项目WindowsApplication2中窗体Form1
private
void
button2_Click(
object
sender, EventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
string path = System.IO.Path.GetFullPath(@"......WindowsApplication2inDebugWindowsApplication2.exe");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Form from1 = null;
from1 = (Form)Activator.CreateInstance(Assembly.LoadFile(path).GetType("WindowsApplication2.Form1", false), true);
from1.Show();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}