C#重复打开表单代码冗余

标签 c# winforms

我得到了一个代码来打开我的表单而没有任何重复,但我想为此创建一个方法,以避免代码冗余。

我的代码:

    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/

相关文章:

c# - 如何使用递归走出迷宫?

c# - 在 Entity Framework Core 的不同方法中使用相同的事务

C#/WinForm - TreeView 节点 : Add to variable and compare

c# - 如何在 C# Winforms 中创建嵌入式资源游标?

c# - 防止加载 DataGridView RowEnter 事件

c# - 不在 OnPaint() : why doesn't it work? 中绘制时的双缓冲

c# - 线程 : BeginInvoke howto add a complete ListviewItem?

c# - 如何在传输过程中关闭请求流时获取 HTTP 响应

c# - 从 URL 获取 TIF 并将其移动到 C# 中的 Azure Blob 存储中

c# - 从html获取特定数据