private void CommonModel_Click(object sender, EventArgs e)
{
#region 通过反射创建窗体
ToolStripMenuItem tsmi = sender as ToolStripMenuItem;
string className = tsmi.Tag.ToString();//这里用tag,因为我们早就把菜单的每一项的tag都给值了(在窗体上) if (Exists(tsmi.Text))
{
return;
}
//反射
Type type = Type.GetType("MenuSkin." + className);//typeof()//项目名比窗体高一级
object obj = Activator.CreateInstance(type); Form form = obj as Form;
form.MdiParent = this;
#endregion #region 为窗体指定事件处理函数
form.Activated += new EventHandler(form_Activated);
form.Leave += new EventHandler(form_Leave);
form.FormClosing += new FormClosingEventHandler(form_FormClosing);
#endregion
//这句代码一定要在最后
form.Show();
}
可以帮忙解读一下代码吗?
form.MdiParent = this;
form.Activated += new EventHandler(form_Activated);
form.Leave += new EventHandler(form_Leave);
form.FormClosing += new FormClosingEventHandler(form_FormClosing); form.Show();
if (Exists(tsmi.Text))
{
return;
}Type type = Type.GetType("MenuSkin." + className);//typeof()//项目名比窗体高一级
object obj = Activator.CreateInstance(type); Form form = obj as Form;
form.MdiParent = this;
form.Activated += new EventHandler(form_Activated);
form.Leave += new EventHandler(form_Leave);
form.FormClosing += new FormClosingEventHandler(form_FormClosing);
1:这几段可以细讲一下吗?
2:form.Activated += new EventHandler(form_Activated);//括号里为什么要放这个东西
form.Leave += new EventHandler(form_Leave);
form.FormClosing += new FormClosingEventHandler(form_FormClosing);
//获取类信息 object obj = Activator.CreateInstance(type);
//创建实例 相当与 MenuSkin.Form _Form =new MenuSkin_Form(); Form form = obj as Form; form.MdiParent = this;
form.Activated += new EventHandler(form_Activated);
//当窗体为活动窗体发生 form_Activated为方法名.
form.Leave += new EventHandler(form_Leave);
//窗体光标离开事件
form.FormClosing += new FormClosingEventHandler(form_FormClosing);
//给窗体增加关闭事件
string className = tsmi.Tag.ToString();//模块信息放在了菜单项的Tag中if (Exists(tsmi.Text)) //猜想可能是做什么模块是否已经加载的判断
{
return;
}Type type = Type.GetType("MenuSkin." + className);//typeof()
object obj = Activator.CreateInstance(type); Form form = obj as Form;
form.MdiParent = this;
//如上这一段是根据菜单项的Tag,获取到模块的入口窗体,然后用反射动态创建该窗体实例form.Activated += new EventHandler(form_Activated);
form.Leave += new EventHandler(form_Leave);
form.FormClosing += new FormClosingEventHandler(form_FormClosing);//给这个动态创建的窗体增加一些基本事件
object obj = Activator.CreateInstance(type); 根据类信息常见该类的实例form.Activated += new EventHandler(form_Activated) 给事件绑定方法,具体在详细的查看一下委托和事件你就明白了