方法一: 

直接检测是否已经打开此MDI窗体 

// 是否已经打开了?(用循环来判断) 
foreach (Form childrenForm in this.MdiChildren) 

//检测是不是当前子窗体名称 
if (childrenForm.Name == "子窗体名称") 

//是的话就是把他显示 
childrenForm.Visible = true; 
//并激活该窗体 
childrenForm.Activate(); 
return; 


//下面是打开子窗体 
Form1 childrenForm = new Form1(); 
childrenForm.MdiParent = this; 
childrenForm.Show(); 
childrenForm.WindowState = FormWindowState.Maximized; 
方法二: 

将子窗体设成单件: 

namespace WindowsFile 

public partial class Form3 : Form 

public Form3() 

InitializeComponent(); 


private void Form3_Load(object sender, EventArgs e) 

richTextBox1.LoadFile(".\\test.txt", RichTextBoxStreamType.PlainText); 

private static Form3 childform=null; 
public static Form3 Form3Signleton() 

if (childform == null) 

childform = new Form3(); 

return childform; 

private void Form3_FormClosing(object sender, FormClosingEventArgs e) 

try 


this.Dispose(true); 
childform = null; 

catch(Exception e) 
{ MessageBox(e.ToString()); } 

方法三: 

这个没用过,也是直接判断 

private static frm_rk frmchild;//定义子窗体 

private void 商品入库ToolStripMenuItem_Click(object sender, EventArgs e)//按钮事件 

frm_rk frmchild = GetForm(); 
frmchild.Show(); 

private frm_rk GetForm()//判断子窗体状态,防止重复显示 


if (frmchild == null || frmchild.IsDisposed) 

frmchild = new frm_rk(); 
frmchild.MdiParent = this; 

return frmchild;