Pergunta

Então, como eu posso passar um valor de um formulário para outro?Por exemplo:O usuário selecione uma organização a partir de uma lista e isso abre uma viagem de formulário que permite que um usuário insira várias informações sobre a viagem.Em um lugar que eu gostaria de acrescentar uma outra pequena janela de pop-up forma que eles podem inserir informação de contacto (apenas um nome e um telefone para POC) da organização que estão a visitar.

Assim, quando essa forma inicial aberta a partir da tela de seleção tem duas Identificações que são simplesmente escondido em caixas de texto (sendo um tripID, e o outro sendo o OrgID), então, como faço para passar estes para o segundo pouco pop-up forma, de modo que as informações de contato tem as Identificações relativas com ele.

Obrigado.

Foi útil?

Solução

A melhor abordagem nestes casos, não é a tentativa de passar um monte de variáveis.É muito código, e é inflexível.Por exemplo, se você precisar passar dois valores, o que acontece ao longo dos anos, quando a exigência aumenta para 5 valores?Tentando manter e passar toda uma pancada de valores é muito codificação de trabalho.

Tenha em mente que cada formulário em ms-access é realmente uma classe de objeto que você pode manipular no código.Assim, usar um objeto de abordagem aqui e você achar que você não só escrever menos código, mas o código vai ser mais clean, mais modular, sem a necessidade de variáveis globais, e o código que você escreve muitas vezes pode ser re-utilizado entre diferentes formas.

Aqui está como:

Em geral, quando um formulário lança outra forma na 2ª forma nas formas em-aberto do evento (na verdade, você pode até mesmo usar como atraso no evento load) você pode pegar uma referência para o ANTERIOR do objeto de formulário.Em outras palavras, você pode usar um objeto de abordagem aqui.

Os formulários de nível de módulo, de forma que eu declare um objeto de formulário como:

Option Compare Database
Option Explicit 
dim frmPrevious       as form 

Em seguida, nas formas de carga evento, vamos lá:

Set frmPrevious = Screen.ActiveForm

Agora, qualquer código em nosso formulário pode usar LIVREMENTE código, eventos, mesmo varibles declaradas como públicas, de que forma anterior no código.

Então, se você quiser forçar uma gravação de disco na forma anterior, e re-carga de dados.

frmPrevious.Refresh

Se você deseja definir o valor de ID, em seguida, vá em:

frmPrevious!ID = some value

E, note que você pode até declarar formulário anterior como uma variável PÚBLICA para o formulário e, assim, se duas formas de profundidade, você pode ir:

frmPrevious.frmPrevious!ID = some value

Então, basta declarar um objeto de formulários em CADA formulários módulo de código (ou pelo menos aqueles em que você precisa para usar valores em código).Isto significa que qualquer código tem um pronto, faz referência à forma anterior de objeto.Funções declaradas como public na forma vai se tornar um MÉTODO do formulário, e podem ser executados como:

frmPrevious.MyCustomRefresh

ou até mesmo coisas como alguns opção para forçar o formulário anterior para gerar e configurar um número de fatura:

frmPrevous.SetInvoice

ou

frmPrevious.SetProjectStatusOn

Assim, não só você pode embaralhar os valores e dados e para trás, mas você pode facilmente executar funções e recursos que você criar no código para o prevous formulário.

Na verdade, como uma codificação padrão, a MAIORIA dos meus formulários têm uma função pública denominada MyRefresh.

Observe que a beleza desta abordagem é que você pode, assim, ler + usar + conjunto de valores de que forma anterior.Isto permite que o código para receber não só os valores, mas também o conjunto de valores em que a forma anterior.Portanto, essa abordagem é bi-direcional.Você pode embaralhar os dados e valores e para trás entre as formas.A outra vantagem aqui é que você NÃO restrita apenas a variáveis, mas pode usar os campos, os valores de controle (eventos, propriedades), etc.

Esta abordagem significa que a maior parte do formulário anterior é agora ao seu alcance.

Portanto, não tente passar toda uma pancada de variáveis.Passar uma referência ao formulário e você tem um bom prontos objeto na ponta dos seus dedos e ele faz esse tipo de problema de codificação de uma brisa.

Outras dicas

A maneira usual seria fazer referência às caixas de texto na forma inicial da forma pop -up, como esta:

Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID

No entanto, isso liga firmemente o formulário pop -up ao formulário inicial, para que não possa ser usado em nenhum outro lugar do aplicativo.

Uma abordagem melhor é usar o OpenArgs:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID

Isso coloca seus dois valores em uma string, que é passada para o formulário pop -up. Você pode analisar os dois valores fora dos OpenArgs usando a função dividida.

Para obter mais informações sobre os parâmetros de passagem usando o OpenArgs, consulte:http://www.fmsinc.com/free/newtips/access/accesstip13.asp

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top