我得到了一个代码来打开我的表单而没有任何重复,但我想为此创建一个方法,以避免代码冗余。
我的代码:
private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (Form openForm in Application.OpenForms)
{
if (openForm.GetType() == typeof(form1))
{
openForm.Activate();
return;
}
}
form1 f1 = new form1();
f1.MdiParent = this;
if (!f1.IsDisposed)
f1.Show();
}
我想要的:
public void formOpener(Form form, string formName)
{
foreach (Form openForm in Application.OpenForms)
{
if (openForm.GetType() == typeof(form))
{
openForm.Activate();
return;
}
}
form formName = new form();
formName.MdiParent = this;
if (!formName.IsDisposed)
formName.Show();
}
private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
formOpener(form1);
}
我对参数有一些疑问。 感谢您的回答!
最佳答案
类似的东西?
public void formOpener<T>() where T : Form, new()
{
var openedForm = Application.OpenForms.OfType<T>().FirstOrDefault();
if (openedForm != null)
{
openedForm.Activate();
return;
}
T newForm = new T();
newForm.MdiParent = this;
newForm.Show();
}
OfType<T>
扩展方法需要 using System.Linq;
用法
formOpener<Form1>();
如果有任何打开,这将显示表单。否则,将创建新的。
如果您可以打开多种形式的 T 类型,则使用 Name
属性来区分它们。
public void formOpener<T>(string formName) where T : Form, new()
{
var openedForm = Application.OpenForms.OfType<T>()
.Where(x => x.Name == formName).FirstOrDefault();
}
关于C#重复打开表单代码冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39750175/