我在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)
存储的每个表单的文字名称。
如何调用集合中的实例呢?说我想让列表中的表单可见?
答案 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