2014-12-29 5 views
0

Мне нужно собрать все имена форм в список. Я пробовал этот код, но этот код только находит формы, которые находятся в главной папке. вот моя стрижка папки.Получить все формы в списке

enter image description here

Вот код, который я использую

Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 
     Dim types As Type() = myAssembly.GetTypes() 

     For Each myType As Type In types 
      MsgBox(myType.BaseType.FullName) 
      If myType.BaseType.FullName = "System.Windows.Forms.Form" Then 

       Dim ProjAndForm = "Mini_Stock_Control." & myType.Name 
       Dim objType As Type = Type.[GetType](ProjAndForm) '' Get Type Of your string 
       Dim objForm As Control = DirectCast(Activator.CreateInstance(objType), Control) 

        MsgBox(objForm.Text) 

      End If 
     Next 

Reference из http://www.codeproject.com Любое одно имеет решение? Пожалуйста, помогите (Пожалуйста, игнорируйте мой плохой английский)

ответ

0

Я рад всем, кто отвечает на мой вопрос. Но я сам решил эту проблему. Проблема, которую я обнаружил, - это ошибка в цикле прокрутки строки и программы без ошибки.

Dim objForm As Control = DirectCast(Activator.CreateInstance(objType), Control) 

Так что я сделал, поставил попытку поймать. Он работает. Теперь все в порядке. работает отлично.

Dim myAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() 
     Dim types As Type() = myAssembly.GetTypes() 

     For Each myType As Type In types 

      If myType.BaseType.FullName = "System.Windows.Forms.Form" Then 

       Dim ProjAndForm = "Mini_Stock_Control." & myType.Name 
       Dim objType As Type = Type.[GetType](ProjAndForm) '' Get Type Of your string 

       Try 
        Dim objForm As Control = DirectCast(Activator.CreateInstance(objType), Control) 

         dg.Rows.Add(objForm.Text) 

       Catch ex As Exception 

       End Try 



      End If 
     Next 
2

Попробуйте этот код:

 Dim col As New Generic.List(Of Type) 
     Dim list() As System.Reflection.Assembly = AppDomain.CurrentDomain.GetAssemblies() 

     For Each asm As Reflection.Assembly In list 
      Dim types() As Type = asm.GetTypes() 
      For Each t As Type In types 
       If t.BaseType Is GetType(Windows.Forms.Form) Then 
        col.Add(t) 
       End If 
      Next 
     Next 

модифицированный код: get all form details in vb.net

+0

Thanks Ahmad. Я сам решил проблему. Пожалуйста, прочитайте мой ответ. Этот ответ также подходит для решения –

Смежные вопросы