我想让子窗体每次打开只显示一次,第一次打开的时候是可以的。但是关闭子窗体再次打开的时候就出现如下的情况了:
子窗体显示代码如下:
public static int rs = 0;//初始化为0
ReaderSytle RS = new ReaderSytle();//*****控制窗体打开的个数,如果已经打开就不能再打开
if (rs == 1)
MessageBox.Show("帮助 窗体已经打开!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
else
{
RS.MdiParent = this;
RS.Show();
rs = 1;
}
子窗体显示代码如下:
public static int rs = 0;//初始化为0
ReaderSytle RS = new ReaderSytle();//*****控制窗体打开的个数,如果已经打开就不能再打开
if (rs == 1)
MessageBox.Show("帮助 窗体已经打开!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
else
{
RS.MdiParent = this;
RS.Show();
rs = 1;
}
private bool CheckChildFrmExist(string childFrmName)
{
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;
}
楼上正解, 可以通过 MdiForm.MdiChildren遍历所有子窗体
ReaderSytle RS = null;//在方法外部声明//方法内部代码
{
if(RS == null || RS.IsDisposed)
{
RS = new ReaderSytle();//
}
RS.MdiParent = this;
RS.Show();
}
{
System.Windows.Forms.Form[] mdiForm = this.MdiChildren;
bool openFlage = false;
foreach (Form fr in mdiForm)
{
if (fr.Name == "FcImportRecQuery")
{
fr.Activate();
fr.WindowState = FormWindowState.Maximized;
openFlage = true;
break;
}
}
if (!openFlage)
{
Yj_SrvForm.FcImportRecQuery nSG = new Yj_SrvForm.FcImportRecQuery(true);
nSG.MdiParent = this;
nSG.WindowState = FormWindowState.Maximized;
this.Update();
nSG.Show();
}
}
catch (Exception exc) { Yj_CommonFunction.ShowMessagebox(exc, this, 0, null); }
如果想让窗体在程序中唯一到可以试下下面..
private static Form1 _form1 = null;
private Form1()
{
InitializeComponent();
}
public static Form1 CreateForm1()
{
if (_form1 == null )
{
_form1 = new Form1();
}
return _form1;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Form1._form1 = null; // 如果关闭的话,清空窗体类中的_form1的引用.
}
private void subForm1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
if (CheckChildFrmExist(f2.Name))
{
f2.MdiParent = this;
f2.Show();
}
else
{
MessageBox.Show("fail");
}
}
private void subForm2ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form8 f8 = new Form8();
if (CheckChildFrmExist(f8.Name))
{
f8.MdiParent = this;
f8.Show();
}
else
{
MessageBox.Show("fail");
}
} private bool CheckChildFrmExist(string childFrmName)
{
bool result = false;
if (this.MdiChildren.Length >= 1)
{
foreach (Form childFrm in this.MdiChildren)
{
//用子窗体的Name进行判断,如果已经存在则将他激活
if (childFrm.Name != childFrmName)
{
if (childFrm.WindowState == FormWindowState.Minimized)
{
childFrm.WindowState = FormWindowState.Normal;
}
childFrm.Activate();
result = true;
}
else
{
result = false;
break;
}
}
return result;
}
else
{
return true;
}
}