【问题标题】:vb.net referring to a program-created form via Newvb.net 通过 New 引用程序创建的表单
【发布时间】:2013-04-08 03:31:44
【问题描述】:

我在 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) 存储的每个表单的文字名称。

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

【问题讨论】:

    标签: .net vb.net winforms


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您抽出宝贵时间回答马库斯!究竟如何声明实例变量?你将如何引用它?我的意思是,假设我创建了这个实例变量,我将如何更改它的文本属性?当我输入一个不存在的变量时,.Net 的智能感知就会启动。
    【解决方案2】:

    我指的是编辑过的问题:除了将表单的名称添加到 ListBox 之外,您还可以自己添加 Form 对象:

    Listbox1.Items.Add(x)
    

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

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

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

    【讨论】:

    • 非常感谢。
    【解决方案3】:

    试试这个...

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多