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