ESCOLHA DE FORMULARIO EM TEMPO DE EXECUCAO

USUARIO.EXCLUIDOS 11/04/2007 14:55:32
#211270
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..!
WEBER 11/04/2007 15:27:27
#211276
set a variavel vform
Set vform = Form2
vform.Show (1)

WEBER 11/04/2007 15:28:32
#211277
tava com tanto tempo q ate resolvi fazer um exemplo rapidinho.

em anexo
ALMARTI 11/04/2007 15:56:50
#211298
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.
USUARIO.EXCLUIDOS 11/04/2007 16:06:15
#211303
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...
USUARIO.EXCLUIDOS 11/04/2007 16:07:50
#211304
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
'--------
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")


WEBER 11/04/2007 16:29:05
#211310
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
USUARIO.EXCLUIDOS 11/04/2007 16:34:47
#211313
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..!
ALMARTI 11/04/2007 16:44:29
#211319
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.
USUARIO.EXCLUIDOS 11/04/2007 17:04:57
#211337
Xi...
Intão lá vamos para a gambiarra...
USUARIO.EXCLUIDOS 11/04/2007 20:34:21
#211370
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:

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



Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas