方法,用于创建窗体的新实例
本文关键字:实例 新实例 用于 创建 窗体 方法 | 更新日期: 2023-09-27 18:16:33
我是一个编程初学者。我尝试创建具有多种形式的小应用程序。我想解释一下,如何通过使用方法创建这个表单的实例来打开表单。
我实际上有这个:
private void firtsToolStripMenuItem_Click(object sender, EventArgs e)
{
if(myForm == null)
{
myForm = new MyForm();
myForm.MdiParent = this;
myForm.FormClosing += myFormForm_FormClosing;
myForm.Show();
}
else
{
myForm.Activate();
}
}
void myForm_FormClosing(object sender, FormClosingEventArgs e)
{
myForm = null;
}
我想处理许多工具条菜单,我不想在他们每个人写代码,所以我想写一些方法打开任何形式与另一种类型
这允许您最多显示每个类的一个MDI子窗体:
// Stores references to form of each type:
private Dictionary<Type, Form> _childWindows = new Dictionary<Type, Form>();
private Form ShowForm<T>() where T : Form
{
var formType = typeof(T);
// If we already display a form of given type -> activate it
if (_childWindows.ContainsKey(formType))
{
var form = _childWindows[formType];
form.Activate();
return form;
}
else
{
// Else create a new form instance
var form = (Form) Activator.CreateInstance(typeof(T));
form.MdiParent = this;
form.FormClosing += myForm_FormClosing;
_childWindows[formType] = form;
form.Show();
return form;
}
}
void myForm_FormClosing(object sender, FormClosingEventArgs e)
{
_childWindows.Remove(sender.GetType());
}
用法:
private void firtsToolStripMenuItem_Click(object sender, EventArgs e)
{
var form = ShowForm<MyForm>();
}
创建一个方法,如果传入的表单尚未实例化,该方法将创建新的实例。
private ShowForm<T>(T form) where T : Form
{
if(form == null)
{
form = Activator.CreateInstance(typeof(T));
form.MdiParent = this;
form.FormClosing += myFormForm_FormClosing;
form.Show();
}
else
{
form.Activate();
}
}