|
|
|
|
|
Dicas
|
|
Visual Basic (Banco de Dados)
|
|
|
Título da Dica: Sincronizando Formulários
|
|
|
|
Postada em 9/9/2003 por Ð@®l@n
Há ocasiões em que vários formulários exibem informações de um mesmo documento ou banco de dados simultaneamente e as alterações feitas em um formulário precisam ser refletidas imediatamente nos outros ou ao menos quando se tornarem ativos.
Uma forma estruturada de lidar com este problema é criar uma rotina de nome comum e pública em todos os formulários que seja usada para atualizar o formulário conforme a fonte dos dados. Chamemos essas rotinas, por exemplo, de "AtualizarForm". Uma outra rotina, global, será encarregada de chamar a todas as rotinas "AtualizarForm" em todos os Form da aplicação. Chamemos essa rotina global de "AtualizarTodosForms". Sempre que uma alteração nos dados for produzida em um formulário, esse chamará a rotina central "AtualizarTodosForms" e essa se encarregará de chamar as rotinas "AtualizarForm" em todos os outros formulários para que tornem-se atualizados. No caso de o formulário que dispara o aviso de atualização não precisar ser atualizado, você pode incluir um argumento do tipo Form nomeado "oChamador" para indicar de onde partiu o aviso para as atualizações. Quando a rotina de atualização for chamada, o argumento pode ser testado para que o formulário saiba se este aviso partiu de outro formulário ou dele mesmo: "If oChamador Is Me Then Exit Sub".
Em casos em que a atualização não necessite ser feita imediatamente, mas somente na ativação de cada form, pode ser incluída a verificação do formulário ativo no início de cada rotina "AtualizarForm". Caso o formulário não esteja ativo, uma variável booleana "bAtualizar" é posta em True para indicar a necessidade futura de atualização. No evento Activate do formulário, é sempre verificada essa variável. Quando ela estiver em True, é chamada a rotina "AtualizarForm" e em seguida a variável é posta em False. Veja abaixo o código fonte que exemplifica estas idéias.
----------------------------------------- 'Rotina "AtualizarTodosForms" ----------------------------------------- Public Sub AtualizarTodosForms (Optional oChamador)
On Error Resume Next
Dim frm as Form
If Not IsMissing (oChamador) Then For Each frm in Forms Call frm.AtualizarForm (oChamador) Next frm Else For Each frm in Forms Call frm.AtualizarForm Next frm End If
End Sub
-------------------------------- 'Rotina "AtualizarForm": -------------------------------- Public Sub AtualizarForm (Optional oChamador)
If Not IsMissing (oChamador) Then If oChamador Is Me Then Exit Sub End If
'Usa a API GetActiveWindow para 'obter o handle do form ativo If GetActiveWindow <> Me.hWnd Then 'Não é form ativo: sinaliza necessidade 'de atualização futura e sai bAtualizar = True Exit Sub End If
' Código que atualiza formulário vai aqui
End Sub
------------------------------ 'Evento Form_Activate ------------------------------ Private Sub Form_Activate() If bAtualizar = True Then Call AtualizarForm 'não passa o form como argumento bAtualizar = False End If End Sub
fonte:http://www.codelines.com/
|
|
|
|
|