2016-03-02 67 views
0

我试过Google搜索方式获取数组或当前表单的子表单无效。有没有一个标准的方法来做这样的事情?我使用.NET 4.0 frameowkr的Visual Studio 2013年如何检索所有儿童形式的收集,其中表格A调用表格B和B是儿童

我已经试过

For Each childForm As Form In Me.MdiChildren 
    Debug.WriteLine(childForm.Name) 
Next 

当我知道一个孩子的形式存在,但我从来没有在我的调试进入的WriteLine代码。长度为0.

+0

想你'标记和vb.net''C#'你提供的例子在'vb.net'中是否重要?你也确定你所引用的“Form”确实有孩子吗?引用表单应该具有属性“IsMdiContainer = True”。如果确实如此,那么您应该能够获得对父母开放的所有儿童实例(Me)... – Codexer

+0

@Codexer任何一种语言的解决方案都可以。两者之间的转换或多或少是微不足道的。 – codemonkeyliketab

+0

另外,你命名的“Form”类是什么。你可以在你的'For Each'语句中使用它们的类名...例如:'对于每个childForm作为YOURCLASSNAME在Me.MdiChildren'中......但是如果它不是那种类型,它也可能会引发异常......然后你可以声明它作为一个对象,然后使用它... – Codexer

回答

0

好的,我认为你想要的是看看Application.OpenForms集合。

Form1中实例化窗体2

Dim f2 as New Form2 
f2.Name = "foo" 
f2.Show 

的新实例,然后在Form1你也许可以得到你与

For Each child as Form in Application.OpenForms.OfType(Of Form2)() 
    Debug.WriteLine(child.Name) 
Next 
+0

不幸的是我认为你使用的是后来的.net框架。它说“OfType不是System.Windows.Forms.FormsCollection的成员。”但是,只要收集中的每个表单都是您为每个表单调用的表单的孩子,这看起来就像我想要的。 – codemonkeyliketab

+0

是的,完全错过了4.0框架的限制。然而,这并不关心哪个窗体实例化form2,它只是从集合中提取Form2类型的窗体,所以它可能仍然不是你正在寻找的。我不得不问,如果form1实例化form2实例与form3实例化form2实例,你将如何区分?我不认为有谁实例化了一个容器,但我认为你可以创建一个List(Of T)并在每次实例化时添加它。 –

+0

是的,列表将是一个解决方案,但要回答您的问题,当我从A打开B0表单并从C(B0 = B1)打开B1时,当我关闭A时,只有B0关闭。 C和B1依然存在。我希望能够重现这个功能,winforms本身就具有代码,而不必使用列表来自己跟踪它。 – codemonkeyliketab