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()??请在上面提到的代码中编辑它是的,现在它是正确的。非常感谢。现在它的工作方式正是我所期待的。再次谢谢谢谢你也谢谢你至少你试过帮助我。。但我提出这个问题的示范可能不够好,你无法理解弗洛里安多亏了你,至少你试着帮助我。。但我提出这个问题的演示可能不够好,你无法理解