私はレジスタといくつかのサブフォームを持つメインフォームを持っています。私はクラスモジュールを使用しており、フォームへのアクセスを容易にするために、フォームモジュールの名前を保存します。クラスにアクセスするための対応する変数がモジュールに保存され、フォーム(clsMod)でon_load(new)が設定されます。最初のアクセスの前に、私のメインフォームはクラスモジュール(initial_form)の値を '初期化'してアクセス可能にする関数を呼び出します。それはこれまでの魅力のように機能します。クラスを介してコントロール/フォームオブジェクトにアクセスすると再初期化されます
しかし、今私は値にアクセスしようとすると、f.e. clsMod.detailsControlまたはclsMod.detailsControl!fieldXyクラスモジュールが再び初期化されます。したがって、すべてのバインドされたオブジェクトが失われます。私はそれのようなコントロール/フォームを使用することを許可されていないと思いますか?後に発生するコース変数 'Object variable'または 'block variable not set'を除いて、エラーはありません。
Private m_ctldetailsControl As control
Public Sub initial_form()
Set detailsControl = Forms!mainForm_ufoMainForm
End Sub
Public Property Get detailsControl() As control
Set detailsControl = m_ctldetailsControl
End Property
Public Property Set detailsControl(ctlDetailsControl As control)
Set m_ctldetailsControl = ctlDetailsControl
End Property
私はクラスモジュールは、ちょうど私が(私はに、Class_Initialize(にタイムスタンプを入れて)「外」からコントロール・オブジェクトにアクセスすると、再び初期化されるとする場合が見ることができるという事実にそれを絞り込みます新しい初期化です)、なぜか分かりません。 Control-Objectsの代わりにForm-Objectsを使うと同じことが起こります。
myコードを削除すると、クラスモジュールがリセットされます。これは、ロードプロセス中に一度だけ設定されるためです(clsMod = new clsModificationを設定します)。そのクラス内の他のものはすべて正常に動作します。クラスを再初期化せずにクラス内からプロパティにアクセスできます。
その他の詳細については、このトピックに関するお読みください。
いくつかの追加:
- クラス変数はモジュール
- に「clsModuleXyなどの公共clsMod」として配置されて、それが私のフォームのonLoadのイベントに設定されます(clsMod =新しいclsModuleXyを設定) (上記descripedとして)
- セットプロパティが正常に動作
- (上記descripedとして)プロパティは、クラスモジュール内の正常に動作します
- 私は新しいinstantiatioクラスモジュールの外のプロパティを取得使用(私はそのプロパティにローカルコントロール/フォームを設定したり、フィールドにアクセスしたい場合)は、n私は犯人は、あなたがこのクラスモジュール
As New
のインスタンスを宣言しているということであると推測している
私は正直に覚えていないことができます、そのように学んだ。コントロールの代わりに 'フォーム'を使用しても、何も変わりません。 – Christian