Usuário com melhor resposta
projeto windows forms, melhor forma de ativar

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
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,
-
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 -
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,
-
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
-
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 BlockPublic
Class frmMain Public menuGeral As frmMain 'Esta variavel irá referencia o menu principalmenuGeral =
Me 'Faz a referência ao menu principal End SubEnd
ClassNos outros forms você pode modificar qualquer objeto que tenha o Modifiers = Public, por exemplo o StatusStrip:
Code BlockPublic
Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadfrmMain.menuGeral.ToolStripStatusLabel1.Text =
End
ClassO segredo aqui é a variável menuGeral, que é uma referência ao frmMain.
[]s,
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,
-
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 -
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,
-
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
-
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 BlockPublic
Class frmMain Public menuGeral As frmMain 'Esta variavel irá referencia o menu principalmenuGeral =
Me 'Faz a referência ao menu principal End SubEnd
ClassNos outros forms você pode modificar qualquer objeto que tenha o Modifiers = Public, por exemplo o StatusStrip:
Code BlockPublic
Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadfrmMain.menuGeral.ToolStripStatusLabel1.Text =
End
ClassO segredo aqui é a variável menuGeral, que é uma referência ao frmMain.
[]s,
-