Pergunta

Alguém tem uma idéia do que poderia impedir um dos seguintes comandos a partir de realmente salvar um formulário?Existe uma configuração que eu estou ausente que poderia tornar o formulário "só de leitura"?Eu estou colocando o controle.propriedade activado no formulário de carregar, mas eu não visto a fazê-lo ficar depois que eu fechar o formulário.

DoCmd.Close acForm, Me.Name, acSaveYes
DoCmd.Save acForm, Me.Name

Editar:Alguns psuedo código para esclarecer.Esta função é executada no carregamento do formulário para ativar/desativar certos controles e funciona 100% como o esperado.

Private Sub Form_Load()
     If IsNull(TempVars.Item(Me.Name)) Then
         TempVars.Add Me.Name,1

         If somecondition = true then
             Me.Controls.Item("somecontrol").enabled = True
         Else
             Me.Controls.Item("somecontrol").enabled = False
         End If
     End If
End Sub

Este evento clicar fecha o formulário e abre outra forma.O problema é que o controle.configurações habilitadas eu definidos no formulário de carga não salvar.

Private Sub button_OnClick()
    DoCmd.OpenForm "someotherform", acnormal
    DoCmd.Close acForm, Me.Name, acSaveYes
End Sub

A próxima vez que eu abrir a primeira forma, as propriedades de controle não será definido, e eu preciso para definir o controle.propriedade ativado novamente.

Foi útil?

Solução

Eu não tenho sido capaz de encontrar qualquer documentação, mas parece que você não pode salvar as alterações de design feitas no modo Normal.Acabei de declarar uma coleção global de tipo de variável.Eu armazenados seqüências de caracteres concatenada nesta coleção variável da convenção de Formulário".Nome E Controle.O nome".Se o formulário que nunca tinha sido aberto, corri o tempo de seleção em que os controles devem ser ativado, e armazenado nesta coleção global.Se o formulário foi aberto pelo menos uma vez, eu loop através dos controles no formulário de verificação para ver se eles estavam na minha coleção global de "autorizados" controles.É uma sensação muito hackish, mas ele funciona muito bem.

Outras dicas

O código que você tem (Fechar e, em seguida, Salvar) falha no meu teste, porque a Mim.O nome está vazio depois de executar o Próximo.Apesar de eu não saber o que outro código que você pode ter, eu era capaz de obter o Formulário para fechar uma vez eu troquei a ordem.

Eu sugiro que você coloque o código no 'Open' evento da seguinte forma:

Private Sub Form_Open(Cancel As Integer)
    DoCmd.Save acForm, Me.Name
    DoCmd.Close acForm, Me.Name, acSaveYes
End Sub

Você deseja alterar a propriedade activado em uma condição?Se você só precisa de que o controle desativado SE o registro ...em seguida, você vai querer mover o habilitando o formulário Atual do evento, que é acionado a cada registro de navegação.Carregar e Abrir demasiado cedo e não repita a navegação.

Private Sub Form_Current()
  If Me!X = True Then
    Me.Controls("somecontrol").Enabled = False
  Else
    Me.Controls("somecontrol").Enabled = True
  End If
End Sub
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top