我想实现以下功能:
当我点击按钮打开一个mdi窗体的时候,如果第二次再点击该按钮(原子窗体没有关闭),不会再打开一个同样的mdi窗体,而是把已经打开的第一个窗体,置为所有打开的mdi窗体的最前面。当然,如果原子窗体打开后又关闭了,那么第二次点击该按钮的时候应该就是直接打开一个新的mdi子窗体
当我点击按钮打开一个mdi窗体的时候,如果第二次再点击该按钮(原子窗体没有关闭),不会再打开一个同样的mdi窗体,而是把已经打开的第一个窗体,置为所有打开的mdi窗体的最前面。当然,如果原子窗体打开后又关闭了,那么第二次点击该按钮的时候应该就是直接打开一个新的mdi子窗体
{
foreach (Form childFrm in this.MdiChildren)
{
//用子窗体的Name进行判断,如果已经存在则将他激活
if (childFrm.Name == childFrmName)
{
if (childFrm.WindowState == FormWindowState.Minimized)
childFrm.WindowState = FormWindowState.Normal;
childFrm.Activate();
return true;
}
}
return false;
}
只要传进去子窗体的名字去判断就可以了
以下为一个实例
private void button2_Click(object sender, EventArgs e)
{
if (this.checkChildFrmExist("frm_Jinhuodan") == true)
{
return;
}
frm_Jinhuodan fm = new frm_Jinhuodan();
fm.MdiParent = this;
fm.Show();
}
public partial class Form1 : Form
{
Form2 form2 = new Form2();
Form3 form3 = new Form3();
public Form1()
{
InitializeComponent();
form2.MdiParent = this;
form3.MdiParent = this;
} private void button1_Click(object sender, EventArgs e)
{
if (form2.IsDisposed)
{
form2 = new Form2();
}
form2.Visible = true;
form2.BringToFront();
} private void button2_Click(object sender, EventArgs e)
{
if (form3.IsDisposed)
{
form3 = new Form3();
}
form3.Visible = true;
form3.BringToFront();
}
}
他怎么提示:
被指定为此窗体的 MdiParent 的窗体不是 MdiContainer。
参数名: value这个错误?如果把
form2.MdiParent = this;
form3.MdiParent = this;
放按钮事件就好用了。
但是关闭再打开的话就不是子窗体了,可以脱离父窗体
this.IsMdiContainer = true; // already called in InitializeComponent();
...
form2.MdiParent = this;
form3.MdiParent = this;