USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Abrir form usando uma string (d uma outra forma)
Randsolo
BELO HORIZONTE
MG - BRASIL
ENUNCIADA !
Postada em 15/07/2004 17:11 hs            
Olá pessoal.
Gostaria de saber se há uma outra forma de abrir um form através de uma string.
Temos os nomes dos forms em um banco de dados.
Gostaríamos de saber como abrir o form através desta informação de forma dinâmica.
Tetamos a seguinte função:
Public Sub CarregaForm(slform As String, optional vModal as boolean)
   On Error GoTo ERRO
   Dim FormToLoad As Form
       Set FormToLoad = Forms.Add(slform)
        If vModal Then
           FormToLoad.Show vbModal, MDISisTrans
        Else
           FormToLoad.Show
           FormToLoad.SetFocus
        End If
    End If
    Exit Sub
ERRO:
Rotina_Erro "CarregaForm"
End Sub

O problema é q a rotina acima apenas instancia o form. Se eu fazer qq referencia ao form novamente, ele dá um .show no form, gerando dois forms.
Será q tem outra forma de abrir um form usando uma string???

Agradeço desde já a atenção!!!
E que a Força estejam com voces... ;-)
   
Eledio Junior
Pontos: 2843
CAÇADOR
SC - BRASIL
Postada em 22/07/2004 10:21 hs         
     
Leandro
não registrado
ENUNCIADA !
Postada em 07/01/2009 15:54 hs   
Teria como fazer o mesmo procedimento mas com objeto data control?

tentei o seguinte mas n deu certo

    Dim dataC as Data

    Set dataC = datas.Add("DataRegistros")
    Load dataC
    MsgBox dataC.Recordset.Count

no aguardo!
   
Treze
Pontos: 2843 Pontos: 2843
SÃO VICENTE
SP - BRASIL
Postada em 07/01/2009 16:49 hs            
posso dar uma sugestão, faça o seguinte

Vá em Project / Components... e selecione microsoft Script Control 1.0

feito isto, inclua em seu form este componente.

agora vamos ao código

no load do form crie os objetos, desta forma

Private Sub Form_load()
ScriptControl1.AddObject "Form2", Form2
ScriptControl1.AddObject "Form3", Form3
' e assim por diante
End Sub

bom no botão Cole este unico código

ScriptControl1.ExecuteStatement ("Form2.show")
ScriptControl1.Reset

e pronto seu form será chamado

para adptar é fácil

ScriptControl1.ExecuteStatement (txtNomeDoForm.Text & ".show")
ScriptControl1.Reset

veja se desta forma já ajuda

PS: você pode usar qualquer função do form em forma de string desta forma
ex:

ScriptControl1.ExecuteStatement ("Form2.Heigth =  12000")
ScriptControl1.Reset

até

diga se funcionou

     
PH1959
Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
Postada em 07/01/2009 16:57 hs            
experimenta assim:
no declarations
dim controle(N) as object ' substitui N pelo numero de Datacontrol q vc tem.
no load do form
set controle(0)= datacontrol1: ....: set controle(N)= datacontrolN
agora é só carregar no seu procedure 
     
Randsolo
BELO HORIZONTE
MG - BRASIL
ENUNCIADA !
Postada em 12/01/2009 15:42 hs            
Oi Gente. Eu consegui resolver o q eu queria.
Na verdade precisava montar os MENUS do sistema de acordo com os forms armazenados em um banco de dados.
Fiz da seguinte forma:

Primeiro crio os Menus manualmente mesmo;
Depois coloco as opções .visible e .Enabled como falso (menos para os menus cabeçários)
Depois chamo a seguinte função abaixo:

Public Sub SetMenu()
Dim clMenu As Control
   sgQuery = "SELECT A.Formulario, B.Nome, B.Nivel,B.Menu, " & vbCr & _
             "   B.MenuItem, A.Acesso " & vbCr & _
             "FROM Controle_Acesso as A INNER JOIN Formulario as B ON A.Formulario = B.Codigo" & vbCr & _
             "WHERE A.Empresa = " & lgEmpresa & vbCr & _
             "  AND A.CodUsuario = " & lgUsuario & vbCr & _
             "  AND A.Acesso = 'S'" & vbCr & _
                "ORDER BY B.Menu, B.MenuItem"
   Call consulta2(sgQuery)
   With RsADO2
      Do While Not .EOF
         For igCount = 0 To Me.Controls.Count - 1
             Set clMenu = Me.Controls(igCount)
               If TypeOf Me.Controls(igCount) Is Menu Then
                  If Trim(UCase(clMenu.Name)) = UCase(Trim("" & !Menu)) _
                     And Trim(UCase(clMenu.Index)) = UCase(Trim("" & !MenuItem)) Then
                      clMenu.Enabled = True
                      clMenu.Visible = True
                      Exit For
                  End If
             End If
         Next

         .MoveNext
      Loop
      .Close
   End With
    Set RsADO2 = Nothing
End Sub


Assim monto o menu conforme eu quero, de acordo com as permissões do usuario.
E no evento click do Menu, crio a chamada do form normalmente, conforme abaixo:

Private Sub mnuRelItem_Click(Index As Integer)
'On Error Resume Next
   MousePointer = vbHourglass
   Select Case Index
      Case 0: Call CarregaForm(frmRelTipo)
      Case 1: Call CarregaForm(frmRelTramitacao)
      Case 2: Call CarregaForm(frmRelTramitacaoProcesso)
   End Select
   MousePointer = vbDefault
End Sub


Public Sub CarregaForm(vForm As Form, Optional vModal As Boolean)
'*********************************************************
'**      Rotina para Exibir os forms no Sistema         **
'**     Criado por Randerson Maurilio em 18/09/2003     **
'*********************************************************
On Error Resume Next
   With vForm
      If vModal Then
         .Show vbModal, MDIPrincipal
      Else
         .Show
         .SetFocus
      End If
    End With
End Sub


Vlw a ajuda de todos
   
Página(s): 1/1    

CyberWEB Network Ltda.    © Copyright 2000-2022   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página