none
projeto windows forms, melhor forma de ativar RRS feed

  • Pergunta

  • Estou desenvolvendo um projeto windows forms que tem uma classe form frmMain que gerencia toda a aplicação.
    cada opção de menu deste form ativa um modulo que está contido em class Labrrary(dll). Ao construir a aplicação gera o executavel frmMain.exe. Estou querendo migrar o frmMain para uma class Labrary tambem, só que fiquei na dúvida como ativar essa aplicação. Seria algo assim?
    1 - criar um projeto console
    2 -  criar uma classe de inicializacao:
     
         public module ativarMain
            
              private m_objMain as frmMain
              sub main()
                     objMain   = new frmMain
                     m_objMain.showDialog()
             end sub  
         end module
       
         public property objMain as frmMain
            get
                  return m_objMain
            end get
            set (bayval value as frmMain)
                m_objMain = value
            end set
         end property

    3 - Suponho que fazendo desta forma e se funcionar, terei acesso ao m_objMain em qualquer parte da minha aplicação atraves da propriedade objMain. O que srs acham?, estou no caminho correto? Fiz um teste no esquema acima, até que a visualização funciona mas varias opções de menu deixaram de funcionar e perderam as configurações originais.
     
    takeo    


    sexta-feira, 16 de novembro de 2007 16:55

Respostas

  • Takeo,

     

    Você pode até usar o projeto console, só tome cuidado em inicializar os objetos como STATIC, pois o método Main é estatico.

     

    Talvez seja interessante manter o form principal como Windows Forms. Tome também cuidado em colocar tudo em DLL pois isto torna o processo de carga um pouco mais lento, principalmente se o hardware que for executar a aplicação não for muito bom.

     

    []s,

     

    domingo, 18 de novembro de 2007 18:04
  • Oi Carlos
    Acho que vou seguir sua recomendação, manter a classe windows form, mas preciso resolver dois problemas  que possa me ajudar.
    PRIMEIRO: um metodo na classe frmMain precisa ser invocado por modulos (dll) ativados por opções de menu do frnMain.
    pensei em duas alternativas (delegate e reflection) mas ambos precisa acessar o objeto frmMain instanciado, não sei como fazer isso
    SEGUNDO: no frmMain tem uma barra de status que tambem deve ter visibilidade para toda aplicação para que informação de cada atividade seja exibida para o cliente. Como poderei fazer isso?
    esses são os dois problemas
    Abraço
    takeo
    segunda-feira, 19 de novembro de 2007 14:55
  • Takeo,

     

    Para acessar o form principal faça o seguinte:

     

    1. crie uma variável do mesmo tipo da classe: static frmMain menu;

    2. No load do form frmMain coloque:  menu = this;

    3. Agora você pode acessar qualquer propriedade do menu usando: frmMain.menu.<propriedade>

     

    No segundo caso, mude o propriedade da barra de status para PUBLIC;

     

    []s,

     

    segunda-feira, 19 de novembro de 2007 15:35

  • Oi Carlos
    Desculpe a minha ignorância mas não entendi o que vc quiz dizer, no primeiro caso estou utilizando o controle menuStrip e no segundo caso o controle statusStrip. Como faria no vb.net 2005? para tornar o menuStrip static e o statusStrip public? pode colocar um snippet de código de exemplo?
    gratissimo
    takeo
                                                                  
    terça-feira, 20 de novembro de 2007 03:27
  • Takeo,

     

    O que precisa ser static é a variável que irá referenciar o frmMain, os controles precisam ter a propriedade Modifiers modificada para Public, assim você poderá acessar de outros formulários.

     

    No form principal, coloque:

     

    Code Block

    Public Class frmMain

    Public menuGeral As frmMain 'Esta variavel irá referencia o menu principal

     

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       menuGeral = Me 'Faz a referência ao menu principal

    End Sub

     

    End Class

     

     

    Nos outros forms você pode modificar qualquer objeto que tenha o Modifiers = Public, por exemplo o StatusStrip:

     

    Code Block

    Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    frmMain.menuGeral.ToolStripStatusLabel1.Text = "Status:"

    End Sub

    End Class

     

     

    O segredo aqui é a variável menuGeral, que é uma referência ao frmMain.

     

    []s,

     

    terça-feira, 20 de novembro de 2007 10:47

Todas as Respostas

  • Takeo,

     

    Você pode até usar o projeto console, só tome cuidado em inicializar os objetos como STATIC, pois o método Main é estatico.

     

    Talvez seja interessante manter o form principal como Windows Forms. Tome também cuidado em colocar tudo em DLL pois isto torna o processo de carga um pouco mais lento, principalmente se o hardware que for executar a aplicação não for muito bom.

     

    []s,

     

    domingo, 18 de novembro de 2007 18:04
  • Oi Carlos
    Acho que vou seguir sua recomendação, manter a classe windows form, mas preciso resolver dois problemas  que possa me ajudar.
    PRIMEIRO: um metodo na classe frmMain precisa ser invocado por modulos (dll) ativados por opções de menu do frnMain.
    pensei em duas alternativas (delegate e reflection) mas ambos precisa acessar o objeto frmMain instanciado, não sei como fazer isso
    SEGUNDO: no frmMain tem uma barra de status que tambem deve ter visibilidade para toda aplicação para que informação de cada atividade seja exibida para o cliente. Como poderei fazer isso?
    esses são os dois problemas
    Abraço
    takeo
    segunda-feira, 19 de novembro de 2007 14:55
  • Takeo,

     

    Para acessar o form principal faça o seguinte:

     

    1. crie uma variável do mesmo tipo da classe: static frmMain menu;

    2. No load do form frmMain coloque:  menu = this;

    3. Agora você pode acessar qualquer propriedade do menu usando: frmMain.menu.<propriedade>

     

    No segundo caso, mude o propriedade da barra de status para PUBLIC;

     

    []s,

     

    segunda-feira, 19 de novembro de 2007 15:35

  • Oi Carlos
    Desculpe a minha ignorância mas não entendi o que vc quiz dizer, no primeiro caso estou utilizando o controle menuStrip e no segundo caso o controle statusStrip. Como faria no vb.net 2005? para tornar o menuStrip static e o statusStrip public? pode colocar um snippet de código de exemplo?
    gratissimo
    takeo
                                                                  
    terça-feira, 20 de novembro de 2007 03:27
  • Takeo,

     

    O que precisa ser static é a variável que irá referenciar o frmMain, os controles precisam ter a propriedade Modifiers modificada para Public, assim você poderá acessar de outros formulários.

     

    No form principal, coloque:

     

    Code Block

    Public Class frmMain

    Public menuGeral As frmMain 'Esta variavel irá referencia o menu principal

     

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       menuGeral = Me 'Faz a referência ao menu principal

    End Sub

     

    End Class

     

     

    Nos outros forms você pode modificar qualquer objeto que tenha o Modifiers = Public, por exemplo o StatusStrip:

     

    Code Block

    Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    frmMain.menuGeral.ToolStripStatusLabel1.Text = "Status:"

    End Sub

    End Class

     

     

    O segredo aqui é a variável menuGeral, que é uma referência ao frmMain.

     

    []s,

     

    terça-feira, 20 de novembro de 2007 10:47
  • Oi Carlos
    Agora acho que entendi.
    vou fazer os testes necessários na minha aplicação
    valeu pelas dicas
    gratissimo
    takeo

    terça-feira, 20 de novembro de 2007 18:57