none
Listagem de Forms RRS feed

  • Pergunta

  • Olá!

    No desenvolvimento da minha aplicação gostaria de gerar um List com o nome de todos os Forms que existem na minha aplicação.

    Consigo fazer isso apenas para os Forms que abro em runtime, mas não consigo listar todos que existem no projeto.

    Vi algumas coisas relacionadas a Assembly mas nada muito útil pela internet.
    Existe alguma classe que me forneça essas informações?


    Sócrates Lopes
    lopes.socrates@hotmail.com

    quarta-feira, 25 de julho de 2012 14:35

Respostas

  • Você pode usar Reflection, e buscar todos os tipos do seu projeto, e verificar quais deles herdam de Form.

     Dim listForms As New List(Of String)
    
          Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
          Dim tipos As Type() = asm.GetTypes()
    
          For i As Integer = 0 To tipos.Length - 1
            If tipos(i).IsSubclassOf(GetType(Form)) OrElse (tipos(i)).GetType.Equals(GetType(Form)) Then
              listForms.Add(tipos(i).Name)
            End If
          Next

    quinta-feira, 26 de julho de 2012 14:48

Todas as Respostas

  • Você pode usar Reflection, e buscar todos os tipos do seu projeto, e verificar quais deles herdam de Form.

     Dim listForms As New List(Of String)
    
          Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
          Dim tipos As Type() = asm.GetTypes()
    
          For i As Integer = 0 To tipos.Length - 1
            If tipos(i).IsSubclassOf(GetType(Form)) OrElse (tipos(i)).GetType.Equals(GetType(Form)) Then
              listForms.Add(tipos(i).Name)
            End If
          Next

    quinta-feira, 26 de julho de 2012 14:48
  • Danimar, muito obrigado!
    Funcionou perfeitamente.

    Apenas fiz a conversão do código para C#, e deixo-o abaixo caso alguém mais precise.

    List<string> listForms = new List<string>();
    
    System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
    Type[] tipos = asm.GetTypes();
    
    for (int i = 0; i <= tipos.Length - 1; i++) {
    	if (tipos[i].IsSubclassOf(typeof(Form)) || (tipos[i]).GetType().Equals(typeof(Form))) {
    		listForms.Add(tipos[i].Name);
    	}
    }
    

    Grande abraço!


    Se a resposta tiver ajudado, não se esqueça de marcá-la como útil.

    Sócrates Lopes
    lopes.socrates@hotmail.com

    domingo, 29 de julho de 2012 04:59