4

我在 vb.net 中有以下代码写在一个按钮中。

dim x as new frm_raw_infosheet

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

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

我试过

x.name = "Form" & incrementingvariable

但是,我不完全确定我将如何引用它。

为了让我的问题更清楚,假设增量变量包含数字 2

incrementingvariable = 2

x 现在包含名称“Form2”

但是,这会返回错误

Form2.enabled = false 

我不能参考 Form2,因为 .Net 说“Form2”不存在!

编辑

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

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

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

4

3 回答 3

3

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

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

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

于 2013-04-08T06:10:12.840 回答
1

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

Listbox1.Items.Add(x)

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

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

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

于 2013-11-29T09:05:09.690 回答
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
于 2021-05-21T09:25:18.493 回答