プロが教えるわが家の防犯対策術!

Access2003です。
フォームにサブフォームを設置し、直接テーブルを表示させています。
このサブフォームのテーブルのある行をダブルクリックしたら
その行のデータを他のフォームのオブジェクトにセットしたいのですが
行や行のデータ全てを取得は出来るのですが、サブフォームのイベントがEnterとExitしかなくて、イベント発生が出来ません。
フォームのダブルクリックでXとYを見て…と思ったのですがサブフォーム上ではフォームのダブルクリックイベントが発生せず。
サブフォームのテーブルはユーザーがソートする事もあるのでベタに上にテキストボックス等を置く事は出来ません。
どうにかダブルクリックで動作させる方法はありませんでしょうか?

A 回答 (2件)

> どうにかダブルクリックで動作させる方法はありませんでしょうか?



前回の質問でも触れたように(下から2つ目の段落)、
http://oshiete1.goo.ne.jp/qa4952701.html

> サブフォームの「コントロールとしてのイベント」は「Enter」と「Exit」の2つしかありませんが、
> ソースオブジェクトに指定したフォーム(上記の例では「SF1」)側で、各種イベント(Open
> その他)が実行

されます。

ですので、No.1の方の回答にもあるように、『既定のビュー』(フォームのプロパティシートの
『書式』タブにあります)を「データシート ビュー」にしたフォームを、サブフォームのソース
オブジェクトにすれば、テーブルと同様の表示で、かつ、ダブルクリック等のイベントを発生
させることができます。
(但し、テーブル/クエリでは「サブデータシート」を表示できますが、これには非対応です)


【重要】
「フォームのダブルクリックイベント」は、データシートの外側(データが表示されていない、
グレーの背景部分)をダブルクリックした時にしか発生しません。
『データシート内でのダブルクリック』でデータを取得するレコードを指定する場合は、面倒
でも「各コントロールのダブルクリックイベント」に処理を記述してやる必要がありますので
ご注意下さい。
(以下のように、他のフォームへの代入を行う部分を、イベントとは別のSubとして作成して、
 各コントロールではそれを呼び出す形にすると、コードを組むのも修正/管理するのも
 比較的楽だと思います)

なお、ダブルクリックした時点で、コントロールの値は「現在のレコードのもの」しか参照
できないので、x,yなどで「どのレコードが選択されたか」の判定は不要です。念のため(汗)


Private Sub 社員コード_DblClick(Cancel As Integer)
  Call FromAtoB
End Sub

Private Sub 氏名_DblClick(Cancel As Integer)
  Call FromAtoB
End Sub

Private Sub FromAtoB()
  With Forms!フォームB   '別フォームの名前が「フォームB」の場合
    !社員コード = Me!社員コード
    !氏名 = Me!氏名
    '(以下、データを転記する処理を必要な追加)
  End With
End Sub
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
直接で出来ないかと思っていたのですが、それは無理なのですね。
No.1の方の回答でテーブル仕様で作成しようとしてだめだったのですが

>、『既定のビュー』(フォームのプロパティシートの
『書式』タブにあります)を「データシート ビュー」にしたフォーム
で出来ました!
検索で「テキストうんぬん」と出てくるのもこれですね!
一度出来てしまえば色んなイベントをいじれそうです。ありがとうございました!

お礼日時:2009/05/14 14:11

> フォームにサブフォームを設置し、直接テーブルを表示させています


これを変更すればできると思います。

手順)
・フォームウィザードで、そのテーブルを対象に表形式でフォームを作成します。
・ダブルクリックなどのイベントを設定します。
・動作等確認します。

・フォームのプロパティで、既定のビューをデータシートに変更し、保存します。

・親フォームのサブフォームコントロールのプロパティで、「ソースオブジェクト」に先ほど作成し保存したフォームを指定します。

※データのやり取りは、サブフォームコントロール名を経由して行います。
サブフォームコントロール名を「FSUB」とした場合、
親から子には(親側で実行)
 Me.FSUB.Form.子テキストボックス = Me.親テキストボックス とか、
子から親には(子側で実行)
 Me.Parent.親テキストボックス = Me.子テキストボックス とか
 Forms("親フォーム名").親テキストボックス = Me.子テキストボックス など

で、どうなりますか。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
>これを変更すればできると思います。
あ、そうなのですね。このまま何とか出来ないかと思ってましたが、変える必要があるのですね。

早速やってみようとしたら
>・フォームウィザードで、そのテーブルを対象に表形式でフォームを作成します。
のとこで「フィールドが多すぎて作成出来ません」となってしまいました;;

お礼日時:2009/05/14 13:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A