vb.net通过New引用程序创建的表单

时间:2013-04-08 03:31:45

标签: .net vb.net winforms

我在vb.net中使用按钮编写了以下代码。

dim x as new frm_raw_infosheet

每当我点击按钮时,程序都会创建一个我想要的表单的新实例。

我的问题是,我如何能够参考这些新创建的表格中的每一个? 例如,我点击了3次按钮,我将如何以编程方式隐藏我用按钮创建的第二个表单?

我试过

x.name = "Form" & incrementingvariable
但是,我并不完全确定我将如何引用它。

为了使我的问题更清楚,让我们说incrementing变量包含数字2

incrementingvariable = 2

x现在包含名称“Form2”

然而,这会返回错误

Form2.enabled = false 

我不能引用Form2,因为.Net说“Form2”不存在!

修改

我知道自从我问这个问题已经有一段时间了,但这是一个更新

在列表框中是我使用Listbox1.items.add(x.Name)存储的每个表单的文字名称。

如何调用集合中的实例呢?说我想让列表中的表单可见?

3 个答案:

答案 0 :(得分:3)

这取决于您希望程序如何工作。

如果您打算在任何时候只打开一个表单实例,可以将new返回的引用保存在持久变量中,例如:实例变量。然后,您可以参考旧表单并在以后关闭它。

如果您需要跟踪多个表单,则可以将new返回的引用保存在集合中,该集合也可以是实例变量。

答案 1 :(得分:1)

我参考编辑过的问题:您可以自己添加Form对象,而不是将表单的名称添加到ListBox中:

Listbox1.Items.Add(x)

如果将ListBox的DisplayMember属性设置为Name,则表单的名称将显示在列表框中(与之前一样)。
现在,您可以通过ListBox的Items集合直接访问表单对象,并在其上调用方法:

DirectCast(ListBox1.Items(2), Form).Enabled = False

此示例访问ListBox中的第三个表单(当然,您需要确保不访问不存在的索引; Count属性在这方面很有用)。
由于项目存储为对象,因此必须先将它们转换为Form对象,然后才能访问Form类中定义的成员。

答案 2 :(得分:0)

试试这个...

Dim frmMyForm As frm_raw_infosheet
Dim i as Integer = 0

For Each frm As Form in Application.OpenForms
    If frm.Name = "frm_raw_infosheet" Then
        i = i + 1
        If i = 2 Then
            frmMyForm = frm
            Exit For
        End If
    End If
Next

If i = 2 Then
    frmMyForm.Visible = False
End If