Programação alterações para o formulário não salvar
-
21-12-2019 - |
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.
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