質問
実際にフォームを保存することから、どちらのコマンドのどちらかを妨げるのを防ぐことができるのは誰でもアイデアを持っていますか?フォームを "読み取り専用"フォームにすることができるのはありませんか?Load On LoadのフォームにControl.Enabledプロパティを切り替えますが、フォームを閉じたら、スティックをするのを見ることができません。
DoCmd.Close acForm, Me.Name, acSaveYes
DoCmd.Save acForm, Me.Name
.
編集: 明確にするためのいくつかのPsueoコード。 この関数はフォームのロードオンに実行され、特定のコントロールを有効/無効にして、予想どおり100%が機能します。
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
.
このクリックイベントはフォームを閉じて別のフォームを開きます。問題は、フォームのロードに設定されているControl.Enabledの設定が保存されません。
Private Sub button_OnClick()
DoCmd.OpenForm "someotherform", acnormal
DoCmd.Close acForm, Me.Name, acSaveYes
End Sub
.
次回最初のフォームを開くときには、制御プロパティは設定されず、conrol.enabledプロパティをもう一度設定する必要があります。
解決
ドキュメントを見つけることができませんでしたが、通常モードで行われた設計変更を保存することはできません。グローバルコレクション型変数を宣言しました。私は、このコレクション変数の連結文字列を「form.name&control.name」に保管しました。フォームが開かれたことがない場合は、どのコントロールを有効にする必要がある長いチェックを実行し、それらをこのコレクショングローバルに保存しました。フォームが少なくとも1回開かれていた場合は、「承認された」コントロールのグローバルコレクションにあるかどうかを確認するために、フォームチェックのコントロールをループしました。それは本当にハッキングされていると感じますが、それはかなりよく機能します。
他のヒント
閉じるとme.nameが空のため、テストに失敗したコードはテストで失敗します。私はあなたが持っているかもしれない他のコードを知りませんが、私は注文を切り替えたらフォームを閉じることができました。
私はあなたが次のようにコードを 'Open'イベントに配置することを勧めます:
Private Sub Form_Open(Cancel As Integer)
DoCmd.Save acForm, Me.Name
DoCmd.Close acForm, Me.Name, acSaveYes
End Sub
. Enabledプロパティを条件で変更しますか?レコードの場合、そのコントロールが無効になっている場合は...それから、すべてのレコードナビゲーションで発生するフォームの現在のイベントの有効化を移動します。ロードとオープンは早すぎてナビゲーションで繰り返さないでください。
Private Sub Form_Current()
If Me!X = True Then
Me.Controls("somecontrol").Enabled = False
Else
Me.Controls("somecontrol").Enabled = True
End If
End Sub
.