ESCOLHA DE FORMULARIO EM TEMPO DE EXECUCAO
Boa tarde,
Estou com o seguinte problema, tenho o nome do formulario em uma String, e quero chamar este formulario em tempo de execução.
O problema é que são varios formularios, e o conteudo da string se altera sempre, então eu precisaria de algo +/- assim:
dim fTeste as Form
fTeste.name = "FrmTeste"
fTeste.show
Sei que isso não funciona, foi só para ilustrar minha duvida, alguem tem alguma sugestão??
Obrigado..!
Estou com o seguinte problema, tenho o nome do formulario em uma String, e quero chamar este formulario em tempo de execução.
O problema é que são varios formularios, e o conteudo da string se altera sempre, então eu precisaria de algo +/- assim:
dim fTeste as Form
fTeste.name = "FrmTeste"
fTeste.show
Sei que isso não funciona, foi só para ilustrar minha duvida, alguem tem alguma sugestão??
Obrigado..!
set a variavel vform
Set vform = Form2
vform.Show (1)
tava com tanto tempo q ate resolvi fazer um exemplo rapidinho.
em anexo
em anexo
Fiquei interessado por este topico. Weber, se no lugar de Form2 ele receber "Form2", ou seja uma string, dara erro de type. Para fazer isto seria necessário converter a Strin em Objeto, o que acho não ser possÃÂÂvel no VB6. Seria algo tipo eval ou ctype, não sei.
Uma maneira deselegante de se fazer isto, usando uma strring, seria carregar todos os forms em modo hide e depois percorrer por for each in forms. Mas como disse, é muito deselegante pois todos os forms deverão estar em memoria para que possam ser percorridos.
Uma maneira deselegante de se fazer isto, usando uma strring, seria carregar todos os forms em modo hide e depois percorrer por for each in forms. Mas como disse, é muito deselegante pois todos os forms deverão estar em memoria para que possam ser percorridos.
Almarti, é exatamente esse o ponto..!!! Eu não tenho Form2.. eu recebo "Form2" em string.
Para vocês terem uma ideia do problema real, eu tenho mais ou menos 100 formularios e 100 menus, cada clique no menu me retorna uma string com o nome do formulario a ser chamado. A solução seria criar 100 eventos click do menu para abrir os 100 formularios. O que eu quero seria trocar esses 100 eventos por um unico evento generico.
Alguem me da uma luz, acho q não é possivel isso em vb, já tentei todas a formas que conhecia...
Para vocês terem uma ideia do problema real, eu tenho mais ou menos 100 formularios e 100 menus, cada clique no menu me retorna uma string com o nome do formulario a ser chamado. A solução seria criar 100 eventos click do menu para abrir os 100 formularios. O que eu quero seria trocar esses 100 eventos por um unico evento generico.
Alguem me da uma luz, acho q não é possivel isso em vb, já tentei todas a formas que conhecia...
Bom, RODRIGO_LM, você pode criar uma função desse tipo, onde você passa o nome do formulário que deseja obter, daàele retorna o formulário instanciado
'--------
'Exemplo
'--------
'---------------
'Chamar a função
'---------------
dim frm as Form
frm = CriarFormulario("frmCadastrarAnuidade")
'--------
'Exemplo
'--------
Function CriarFormulario(Nome As String) As Form
Dim Frm As Form
Select Case Nome
Case "frmCadastrarAndamentoDeRequerimento"
Set Frm = New frmCadastrarAndamentoDeRequerimento
Case "frmCadastrarAnuidade"
Set Frm = New frmCadastrarAnuidade
Case "frmCadastrarAtividade"
Set Frm = New frmCadastrarAtividade
Case "frmCadastrarAuditoria"
Set Frm = New frmCadastrarAuditoria
Case "frmCadastrarAutuacao"
Set Frm = New frmCadastrarAutuacao
Case "frmCadastrarBaixaDeBoleta"
Set Frm = New frmCadastrarBaixaDeBoleta
Case "frmCadastrarBaixaManual"
Set Frm = New frmCadastrarBaixaManual
Case "frmCadastrarBanco"
Set Frm = New frmCadastrarBanco
Case "frmCadastrarBoleta"
Set Frm = New frmCadastrarBoleta
Case "frmCadastrarCarteira"
End Select
Set CriarFormulario = Frm
End Function
'---------------
'Chamar a função
'---------------
dim frm as Form
frm = CriarFormulario("frmCadastrarAnuidade")
mas pera ai pessoal nao to entendendo o nome do form é uma string tanto faz se tu clicar em um menu por exemplo o menu form2, e la tu define a variavel vform = form bla, bla
nao entendi o problema sera trazido mesmo como string a questa esta q tu tens q setar set a variavel q é um form mas na realidade é o nome do form q pode ser uma string
nao entendi o problema sera trazido mesmo como string a questa esta q tu tens q setar set a variavel q é um form mas na realidade é o nome do form q pode ser uma string
Piolho, só q deste jeito eu teria que listar todos os meus formularios, e quando adicionar outro formulario eu vou ter q adicionar no case, é exatamente isso que eu quero evitar [se tiver algum jeito]
Weber, o nome do form é uma string sim, a questão é.. como eu dou um set para a variavel virar um form, já tentei de todas as formas..!!! Não consegui..!
Weber, o nome do form é uma string sim, a questão é.. como eu dou um set para a variavel virar um form, já tentei de todas as formas..!!! Não consegui..!
Olha, o método do Piolho ainda é o mais aceito. O que você quer fazer se chama Macro Substituição e o VB não aceita. Apenas as linguagens totalmente OO podem aceitar a MS: .net, java.
Xi...
Intão lá vamos para a gambiarra...
Intão lá vamos para a gambiarra...
antes de partir para essa...
primeiro - qual o tamanho destes forms?
se forem formularios pequenos, vc pode mudar a estrategia...
vc literalmente carrega todos no comeco de seu programa - nao usando show e sim load - assim eles ficariam na memoria e vc pode ainda justificar que o tempo de execucao eh menor pq eles nao precisao ser executados uma vez que o aplicativo esteja aberto - note - isso soh eh valido se os forms forem pequenos, se forem pesados, vc vai acabar consumindo recurso demais...
mas partindo do principio que sao pequenos, vc pode simplesmente fazer um:
primeiro - qual o tamanho destes forms?
se forem formularios pequenos, vc pode mudar a estrategia...
vc literalmente carrega todos no comeco de seu programa - nao usando show e sim load - assim eles ficariam na memoria e vc pode ainda justificar que o tempo de execucao eh menor pq eles nao precisao ser executados uma vez que o aplicativo esteja aberto - note - isso soh eh valido se os forms forem pequenos, se forem pesados, vc vai acabar consumindo recurso demais...
mas partindo do principio que sao pequenos, vc pode simplesmente fazer um:
Function CriarFormulario(Nome As String) As Form
Dim Frm As Form
for each frm in forms
if frm.name = nome then
set criarFormulario = frm
exit for
end if
next frm
End Function
Tópico encerrado , respostas não são mais permitidas