フォームへのプログラムによる変更は保存されません

StackOverflow https://stackoverflow.com//questions/22048648

  •  21-12-2019
  •  | 
  •  

質問

実際にフォームを保存することから、どちらのコマンドのどちらかを妨げるのを防ぐことができるのは誰でもアイデアを持っていますか?フォームを "読み取り専用"フォームにすることができるのはありませんか?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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top