10

では、あるフォームから別のフォームに値を渡すにはどうすればよいでしょうか? 例: ユーザーがリストから組織を選択すると、旅行に関するさまざまな情報を入力できる旅行フォームが開きます。ある場所で、訪問先の組織の連絡先情報 (POC の名前と電話番号のみ) を入力できる別の小さなポップアップ フォームを追加したいと考えています。

最初のフォームが選択画面から開かれたとき、テキスト ボックスに単純に隠されている 2 つの ID (1 つは tripID、もう 1 つは OrgID) を持っているので、これらを 2 番目の小さなポップアップ フォームにどのように渡して連絡先情報には相対 ID が含まれています。

ありがとう。

4

3 に答える 3

18

このような場合の最善の方法は、一連の変数を渡そうとしないことです。コードが多すぎて、柔軟性に欠けます。たとえば、2 つの値を渡す必要がある場合、その要件が 5 つの値に増加すると、何年にもわたって何が起こるでしょうか? 大量の値を保持して渡そうとするのは、コーディング作業が多すぎます。

ms-access の各フォームは、実際にはコードで操作できるクラス オブジェクトであることに注意してください。したがって、ここでオブジェクト アプローチを使用すると、記述するコードが少なくなるだけでなく、コードがよりクリーンでモジュール化され、グローバル変数が不要になり、記述したコードをさまざまな形式で再利用できることがわかります。

方法は次のとおりです。

一般に、あるフォームがフォームのオープン イベントで 2 番目のフォームで別のフォームを起動すると (実際には、ロード イベントの最後まで使用することもできます)、PREVIOUS フォーム オブジェクトへの参照を取得できます。つまり、ここではオブジェクト アプローチを使用できます。

フォーム モジュール レベルでは、フォームのフォーム オブジェクトを次のように宣言します。

Option Compare Database
Option Explicit 
dim frmPrevious       as form 

次に、フォームのオンロード イベントで、次のようにします。

Set frmPrevious = Screen.ActiveForm

これで、フォーム内のすべてのコードで、コード、イベント、コード内の前のフォームから public として宣言された変数でさえも自由に使用できるようになりました。

したがって、以前の形式のディスク書き込みを強制し、データを再ロードする場合。

frmPrevious.Refresh

ID 値を設定する場合は、次のようにします。

frmPrevious!ID = some value

また、form previous をそのフォームの PUBLIC 変数として宣言することもできることに注意してください。

frmPrevious.frmPrevious!ID = some value

そのため、各フォーム コード モジュール (または少なくともコードで値を使用する必要があるモジュール) でフォーム オブジェクトを宣言するだけです。上記は、すべてのコードが前のフォーム オブジェクトへの既製の参照を持っていることを意味します。フォームでパブリックとして宣言された関数は、フォームのメソッドになり、次のように実行できます。

frmPrevious.MyCustomRefresh

または、前のフォームに請求書番号を生成して設定するように強制するオプションのようなものさえあります。

frmPrevous.SetInvoice

また

frmPrevious.SetProjectStatusOn

したがって、値とデータを前後にシャッフルできるだけでなく、前のフォームのコードで作成した機能や関数を簡単に実行できます。

実際、コーディング標準として、私のフォームのほとんどには という public 関数がありMyRefreshます。

このアプローチの優れた点は、以前のフォームから値を読み取り、使用し、値を設定できることです。これにより、コードで値を受け取るだけでなく、以前の形式で値を設定することもできます。したがって、このアプローチは双方向です。フォーム間でデータと値をシャッフルできます。ここでのもう 1 つの利点は、変数だけに制限されるのではなく、フィールド、コントロール値 (イベント、プロパティ) などを使用できることです。

このアプローチは、以前のフォームの多くがすぐに利用できることを意味します。

したがって、大量の変数を渡そうとしないでください。フォームへの参照を渡すと、既製のオブジェクトが手元にあり、この種のコーディングの問題が簡単になります。

于 2009-09-23T08:02:42.120 に答える
6

通常の方法は、次のように、ポップアップ フォームから初期フォームのテキスト ボックスを参照することです。

Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID

ただし、これはポップアップ フォームを初期フォームにしっかりとバインドするため、アプリケーションの他の場所では使用できません。

より良いアプローチは、OpenArgs を使用することです。

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID

これにより、2 つの値が文字列に配置され、ポップアップ フォームに渡されます。次に、Split 関数を使用して OpenArgs から 2 つの値を解析できます。

OpenArgs を使用してパラメーターを渡す方法の詳細については、 http ://www.fmsinc.com/free/NewTips/Access/accesstip13.asp を参照してください。

于 2009-09-22T22:36:32.647 に答える
1

これは助けることができます

MS Access: あるアクセス フォームから別のアクセス フォームにパラメータを渡す

于 2009-09-23T07:13:52.373 に答える