Vb.net 每个表单的控件列表

Vb.net 每个表单的控件列表,vb.net,forms,listbox,controls,Vb.net,Forms,Listbox,Controls,iam使用vb.net 2008,我有两个列表框,一个用于列出我项目中的所有表单名称,工作正常,但我需要的是当我在表单列表中单击时,另一个列表框应显示listbox1中所选表单名称中的所有控件!我一直在努力,但运气不好。请帮忙。这是列出所有表单的代码 Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() Dim types As Type()

iam使用vb.net 2008,我有两个列表框,一个用于列出我项目中的所有表单名称,工作正常,但我需要的是当我在表单列表中单击时,另一个列表框应显示listbox1中所选表单名称中的所有控件!我一直在努力,但运气不好。请帮忙。这是列出所有表单的代码

Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
        Dim types As Type() = myAssembly.GetTypes()
        For Each myType As Object In types

            If myType.BaseType.FullName.ToString.ToUpper = "SYSTEM.WINDOWS.FORMS.FORM" Then
                ListBox1.Items.Add(myType.Name)
            End If
        Next
这就是我在列表2中尝试的

 Dim f As New Form
        f.Name = ListBox1.SelectedItem.ToString
        For Each c As Control In f.Controls
            ListBox2.Items.Add(c.Name)
        Next

好的!经过几个小时的狩猎-我希望这在vb2008中起作用。它在vb2015中有效,但让我们期待吧!获取所有表单列表的代码来自另一个源代码。我在寻找答案时遇到的问题总是导致运行时强制转换出错——但最后这似乎奏效了。希望它对你也有用

Public Class Form1
    Dim allforms() As Form
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        allforms = (From t As Type In Me.GetType().Assembly.GetTypes()
                    Where t.BaseType Is GetType(Form)
                    Let f = DirectCast(Activator.CreateInstance(t), Form)
                    Select f).ToArray
        For Each frm As Form In allForms
            ListBox1.Items.Add(frm.Name)
        Next
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        For Each c As Control In allforms(ListBox1.SelectedIndex).Controls
            ListBox2.Items.Add(c.Name)
        Next
    End Sub
End Class

这很狡猾:
如果myType.BaseType.FullName.ToString.ToUpper=“SYSTEM.WINDOWS.FORMS.FORM”那么
。最好使用以下命令:
如果myType.BaseType是GetType(Form),那么
。使用
字符串
执行除文本以外的操作应该是您最后的选择。此外,这将排除从
表单
以外的其他类型派生的表单。最好还是使用这个:
如果GetType(Form).IsAssignableFrom(myType)那么
。至于这个问题,创建
表单
类的实例并更改其
名称
并不会神奇地使它成为不同的类型。首先必须实际创建该类型的实例。Dim ddb As String=ListBox1.SelectedItem Dim x As String=System.Reflection.Assembly.GetExecutionGassembly.GetName.Name()Dim ProjAndForm As String=x+““+ddb Dim objType As type=type.[GetType](ProjAndForm)Dim objForm As Control=DirectCast(Activator.CreateInstance(objType),Control)
Dim f As New Form
应该创建一个通用空白表单的实例,而不是您想要创建的任何表单,您可能需要添加Imports System.Linq