Osama Gadour
Osama Gadour

Reputation: 187

list of controls for each form

iam using vb.net 2008 ,i have 2 listboxes, one is for listing all forms name in my project and works fine, but what i need is when i click in the forms list, the other listbox should show me all the controls in the selected form name in listbox1! i have been trying and no luck.please help. this the code for listing all forms

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

and this what i was trying in list2

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

Upvotes: 2

Views: 3132

Answers (1)

David Wilson
David Wilson

Reputation: 4439

OK! After several hours hunting - I hope this works in vb2008. It works in vb2015, but let's hope! The code to get a list of all forms came from another source. My problem in finding an answer has always resulted in a error in runtime casting- but finally this seems to work. Hopefully, it works for you as well.

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

Upvotes: 1

Related Questions