Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为mdi容器创建函数_C#_Winforms_Mdi - Fatal编程技术网

C# 如何为mdi容器创建函数

C# 如何为mdi容器创建函数,c#,winforms,mdi,C#,Winforms,Mdi,如何为下面的代码创建一个函数,这样我就不必编写下面的全部代码来将窗体用作子窗体 Students stu = null; private void studentsToolStripMenuItem1_Click(object sender, EventArgs e) { if (stu == null || stu.IsDisposed) { stu = new Students(); stu.MdiParent = this; stu.Show(); }

如何为下面的代码创建一个函数,这样我就不必编写下面的全部代码来将窗体用作子窗体

Students stu = null;
private void studentsToolStripMenuItem1_Click(object sender, EventArgs e)
{
  if (stu == null || stu.IsDisposed)
  {
    stu = new Students();
    stu.MdiParent = this;
    stu.Show();
  }
  else
  {
    stu.Activate();
  }
}

将学生作为独生子女班级/表格:

public class Students: Form
{
    private static Students _Self;
    public static Students ShowOrActivate(Form parent)
    {
        if (_Self == null)
        {
            _Self = new Students();
            _Self.MdiParent = this;
            _Self.Show();
        }
        else
            _Self.Activate();
    }
}
现在用

private void studentsToolStripMenuItem1_Click(object sender, EventArgs e)
{
Students.ShowOrActivate(this);
}

将学生作为独生子女班级/表格:

public class Students: Form
{
    private static Students _Self;
    public static Students ShowOrActivate(Form parent)
    {
        if (_Self == null)
        {
            _Self = new Students();
            _Self.MdiParent = this;
            _Self.Show();
        }
        else
            _Self.Activate();
    }
}
现在用

private void studentsToolStripMenuItem1_Click(object sender, EventArgs e)
{
Students.ShowOrActivate(this);
}

你的代码没有什么问题。您可以通过稍微反射使其干燥:

    public Form CreateMdiChild(Type type, bool singleton) {
        if (singleton) {
            foreach (var child in this.MdiChildren) {
                if (child.GetType() == type) {
                    child.WindowState = FormWindowState.Normal;
                    child.Show();
                    child.Activate();
                    return child;
                }
            }
        }
        Form form = (Form)Activator.CreateInstance(type);
        form.MdiParent = this;
        form.Show();
        return form;
    }
用法:

 CreateMdiChild(typeof(Students), true);
Students students;
private void studentsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    CreateMdiChild<Students>(ref students);
}

你的代码没有什么问题。您可以通过稍微反射使其干燥:

    public Form CreateMdiChild(Type type, bool singleton) {
        if (singleton) {
            foreach (var child in this.MdiChildren) {
                if (child.GetType() == type) {
                    child.WindowState = FormWindowState.Normal;
                    child.Show();
                    child.Activate();
                    return child;
                }
            }
        }
        Form form = (Form)Activator.CreateInstance(type);
        form.MdiParent = this;
        form.Show();
        return form;
    }
用法:

 CreateMdiChild(typeof(Students), true);
Students students;
private void studentsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    CreateMdiChild<Students>(ref students);
}
试试这个

private void CreateMdiChild<T>(ref T t) where T : Form, new()
{            
    if (t == null || t.IsDisposed)
    {
        t = new T();
        t.MdiParent = this;
        t.Show();
    }
    else
    {
        if (t.WindowState == FormWindowState.Minimized)
        {
            t.WindowState = FormWindowState.Normal;
        }
        else
        {
            t.Activate();
        }
    }
}
private void CreateMdiChild(ref T T),其中T:Form,new()
{            
if(t==null | | t.IsDisposed)
{
t=新的t();
t、 MdiParent=此;
t、 Show();
}
其他的
{
if(t.WindowState==FormWindowState.Minimized)
{
t、 WindowState=FormWindowState.Normal;
}
其他的
{
t、 激活();
}
}
}
用法:

 CreateMdiChild(typeof(Students), true);
Students students;
private void studentsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    CreateMdiChild<Students>(ref students);
}
学生;
private void studentsToolStripMenuItem1\u单击(对象发送者,事件参数e)
{
儿童(参考学生);
}
试试这个

private void CreateMdiChild<T>(ref T t) where T : Form, new()
{            
    if (t == null || t.IsDisposed)
    {
        t = new T();
        t.MdiParent = this;
        t.Show();
    }
    else
    {
        if (t.WindowState == FormWindowState.Minimized)
        {
            t.WindowState = FormWindowState.Normal;
        }
        else
        {
            t.Activate();
        }
    }
}
private void CreateMdiChild(ref T T),其中T:Form,new()
{            
if(t==null | | t.IsDisposed)
{
t=新的t();
t、 MdiParent=此;
t、 Show();
}
其他的
{
if(t.WindowState==FormWindowState.Minimized)
{
t、 WindowState=FormWindowState.Normal;
}
其他的
{
t、 激活();
}
}
}
用法:

 CreateMdiChild(typeof(Students), true);
Students students;
private void studentsToolStripMenuItem1_Click(object sender, EventArgs e)
{
    CreateMdiChild<Students>(ref students);
}
学生;
private void studentsToolStripMenuItem1\u单击(对象发送者,事件参数e)
{
儿童(参考学生);
}

您能详细说明问题所在吗?我的申请表中有10张表格。我必须为mdi parant表单中用作mdi子表单的每个表单编写上述代码。我想要一个函数,可以用于每个子表单,以便将其用作mdi容器中的mdi子表单。请详细说明问题是什么?我的应用程序中有10个表单。我必须为mdi parant表单中使用的每个表单编写上述代码作为mdi子表单我想要一个函数,我可以与每个子表单一起使用,以使其在mdi容器服务器中用作mdi子表单。太多了。我已经试过了,它完全按照我想要的方式工作。但它不适用于我的else案例,即else激活。e、 g如果表单已在mdi容器中打开,则应在按下按钮时激活该表单。在发布此代码之前,应对该场景进行测试。您确定单例参数传递的是true吗?您可以添加child.Activate()使其更显式。是的,我正在传递singleton的true。我应该在哪里添加chil.Activate()??请在上面提到的代码中编辑它是的,现在它是正确的。非常感谢。现在它的工作方式正是我所期待的。再次谢谢,非常好的汉斯·帕桑。太多了。我已经试过了,它完全按照我想要的方式工作。但它不适用于我的else案例,即else激活。e、 g如果表单已在mdi容器中打开,则应在按下按钮时激活该表单。在发布此代码之前,应对该场景进行测试。您确定单例参数传递的是true吗?您可以添加child.Activate()使其更显式。是的,我正在传递singleton的true。我应该在哪里添加chil.Activate()??请在上面提到的代码中编辑它是的,现在它是正确的。非常感谢。现在它的工作方式正是我所期待的。再次谢谢谢谢你也谢谢你至少你试过帮助我。。但我提出这个问题的示范可能不够好,你无法理解弗洛里安多亏了你,至少你试着帮助我。。但我提出这个问题的演示可能不够好,你无法理解