取得所有子窗体,通过子窗体的名称关闭子窗体
private void button3_Click(object sender, System.EventArgs e)
{
foreach(System.Windows.Forms.Form f in  this.OwnedForms )
{
if(f.Name == "Form2")
{
f.Close();
}
}
}

解决方案 »

  1.   

    to  hbxtlhx(下着春雨的天) :就是主窗体中如何关闭子窗体中启动的窗体。
    lonestar555(孤竹 || Bamboo)的办法不错,应该可以解决。先去试试,回头来揭帖!
    呵呵,谢谢了!
      

  2.   

    我可能是理解了你的意思,对,你可以通过循环来找到那个你打开的窗体来关闭它就像lonestar555(孤竹 || Bamboo) 说的就可以了,
    不过我想你不愿来通过循环来关闭窗体吧!
    我觉得你的思路要改一下,把你要打开的窗体做成在你的代码可访问的范围内,比如放到到类的变量声明处,声明一个private的变量,而只不在你的那个方法内.这样在一个地方实例化,可以在多个地方访问.也就可以轻松关闭了.
    因为你是用Show而不是ShowDialog所以才会有这个问题.
      

  3.   

    hbxtlhx(下着春雨的天):很感谢你的热心回复。实际上,我的这个Form(),是在一个类文件里面打开的,子窗体中有一个DataGrid,如果用户单击了某个类型的DataGridCell,就会调用这个类文件并打开这个Form,因此把它不太好把它放在父窗体那个类文件里面声明。
      

  4.   

    Form a= new Form2();
      a.close();
      

  5.   

    用代码启动的窗体应该和启动它的子窗体共生吧?在子窗体的销毁事件中对其进行处理不可以么?
    为什么要在MDI窗体里面越级处理呢?
      

  6.   

    to  fansenwei(绿茵萤火虫):主窗体只想关闭由子窗体启动的窗体,而不想关闭子窗体本身。谢谢大家,问题已经解决。