親フォームとサブフォームでの値の渡し方

このQ&Aのポイント
  • 親フォームとサブフォームでの値の渡し方について知りたいです。
  • 部門名を入力フォームに入れる際に参照ボタンを押し、サブフォームで選択します。しかし、親フォームに部門名が存在しない場合にエラーが発生してしまいます。このエラーを避ける方法はありますか?
  • ウェブ開発において、ポップアップはできるだけ使用しない方が良いとされていますが、この実装ではポップアップを使用しなければならないため、スクリプトエラーを回避する方法を知りたいです。
回答を見る
  • ベストアンサー

親フォームとサブフォームでの値の渡し方

入力フォームに部門名(textbox)を入れる項目があります。 部門名を入れるには参照ボタンを押してサブフォームを開きます。 サブフォームにはDBから引っ張ってきた部門一覧が表示されます。 このなかから該当する部門を選び「選択」ボタンを押します。 ここで、親フォームの部門名(text)に値を設定する方法として javascriptを使用し下記のように記述しています。 window.opener.document.forms[0].bumon.value=選択した部門名; 問題なのが、もし親フォームでメニューに戻ってしまっていて サブフォームの「選択」ボタンを押されたときです。 当然、親フォームには部門名(textbox)がないのでスクリプトエラーに なります。 親フォームに「部門名(textbox)」が存在するかどうかチェック、又は スクリプトエラーがでないようにする方法はありますでしょうか? WEBではポップアップはあまり開かない方が良いと聞きますが 仕様なのでこの実装できくしかありません。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

(1)親ページにfocusが移った場合もしくはunload時に サブフォームを閉じる。 (2)サブフォームからopener.herf.locationを見て 想定されるページではない場合はエラー処理をいれる。 (3)サブウィンドウのonBlur時に、自分にfocusを戻すか、自分を閉じる (4)IEに限定していいなら(?)モーダルダイアログをつかう。 などあります

rallys
質問者

お礼

ご回答ありがとうございます。 いろいろ対策はあるんですね。 早速あした試してみたいとおもいます。

関連するQ&A

  • サブフォームから親フォーム制御に関して質問です。

    始めまして、正暉といいます。 いつも有益な情報頂いております。 私が困っているのは親フォームから新しいサブフォームを開き、 親フォームのSelectのOptionメンバーをサブフォームから追加したいですが。 テキストボックスのValue等は上手く変えられるし、 Selectの既にあるOptionを変更するのは問題なく動きました。 下記の場合はOptionオブジェクトを新しくSelectに追加する際にエラーが発生しています。 下記の内容はサブフォームの追加ボタンを押した時のサブフォームにあるJavaScriptの一部です。 <Script Language="JavaScript"> /* サブフォームから親フォームのSelectにOption追加 */ function AddOptions(){ var f = window.opener.document.forms[0]; /* 親フォームの宣言 */ var Kname = "TEST"; /* 追加項目の宣言 */ var reg = "True"; /* 追加許可 */ if (reg != ""){ /* 親フォームのSelectのOption数 */ var cnt = f.selectA.options.length; /* 親フォームのSelectにOption追加 */ f.selectA.options[cnt] = new Option(Kname,Kname); /* ←ここでエラーが発生しています。*/ /* 親フォームのSelectの表示数 */ f.selectA.length = cnt+1; } } </Script> エラーメッセージ: ランタイムエラー サーバーに例外が発生しました。 デバッグしてみましたその時のエラーメッセージ: 認識できない例外の種類の例外はハンドルできません。 えらメッセージを何度も振り返すとMicrosoftのエラー報告をする画面が出てきます。 全然聞いたことも見たことも無いエラーなので困っています。 エラーの理由がおわかりの方は是非教えていただきたいですが。 よろしくお願いします。

  • 子ウィンドウから親ウィンドウへの値代入

    こんにちは。 asp.net2.0を使い始めて間もないのですが、子ウィンドウから親ウィンドウへの値代入で困ってます。 親ウィンドウからボタンで子ウィンドウを表示し、子ウィンドウのGridViewで選択した値を親ウィンドウの テキストボックス(サーバーコントロール)に代入したいのですが、 ['window.opener.form1.TextBox1' は Null またはオブジェクトではありません。] というエラーが出てしまいます。 ネットで見つけたサンプルは、親、子ともにウェブフォームを使用しており、確かにうまくいくのですが、 私が作っているページはマスターページの中のコンテンツフォームを親としていて、うまくいきません。 ※但し、親側のコントロールをHTMLクライアントコントロールのINPUTタグにし、 さらにフォーム名をaspnetForm(ブラウザのソース表示でみたらそうなってました。自動生成?) にして ↓子ウィンドウのグリッド選択時ソース protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { string strScript; strScript = "<script language='javascript'>"; strScript += "window.opener.form1.TextBox1.value='aaaa';"; strScript += "window.close();"; strScript += "</script>"; Response.Write(strScript); } リテラルコントロールにしたり、TextBox1.valueではなくTextBox1.textにしてみたりと いろんなパターンを試しましたが、だめでした。 コンテンツフォームでは親のサーバーコントロールへの値代入は不可能なのでしょうか? そもそも、子ウィンドウでの検索というのはASP.NETでは、あまり一般的ではないのでしょうか? 宜しくお願いいたします。 (情報、不足してましたら教えてください。)

  • Access メインフォーム サブフォームにて

    お世話になります。 Accessにて メインフォームにコマンドボタンを置いて、クリックするとサブフォームのレコードが 次に行くようにしたいのですが、 コマンドボタン クリック Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus DoCmd.GoToRecord , , acNext メインフォームとサブフォームのレコードが次に行ってしまいます。 サブフォームだけ次のレコードに行くには、どのようにすれば良いのでしょうか。 分かる方教えて下さい。 宜しくお願いします。

  • Access+VB 子フォームから親フォームを・・・

    親フォームの中にタブを置き、その中にサブフォームを置いています。 子フォーム側から、上記のサブフォームの追加許可を「はい」にしたいのですが、どのように記述したらよろしいのでしょうか? Forms("親フォーム名").[サブフォーム名].AllowAdditions = True  これで通りませんでした。 教えて下さい。

  • サブフォームの値をメインフォームで表示

    Accessのサブフォームの値をメインフォームで表示する方法をお教え下さい。 画像にありますように、各コントロールは以下になります。 http://upload.fam.cx/cgi-bin/img-box/th6120120093700.jpg MAIN_FORM1(このフォーム) subform_1(サブフォーム) combo1(コンボボックス) textbox1(テキストボックス) subform_1はクエリオブジェクト、「Q_月報」を呼び出し、以下のSQLでできています。 -------------------------------------------------------------------------------------------------- SELECT Format([伝票日付],"yyyy-mm") AS 月, 出庫テーブル.商品番号, 商品マスタ.商品名, Sum(出庫テーブル.数量) AS 数量の合計 FROM 出庫テーブル INNER JOIN 商品マスタ ON 出庫テーブル.商品番号 = 商品マスタ.商品番号 WHERE (((Format([伝票日付],"yyyy-mm"))=[Forms]![月報]![リスト2])) GROUP BY Format([伝票日付],"yyyy-mm"), 出庫テーブル.商品番号, 商品マスタ.商品名; -------------------------------------------------------------------------------------------------- MAIN_FORM1には下記のVBAコードが書かれています。 -------------------------------------------------------------------------------------------------- Private Sub リスト2_Click() Me!月報サブフォーム.Requery End Sub -------------------------------------------------------------------------------------------------- MAIN_FORM1を開き、コンボボックスにある日付を選択すると、日付をキーにサブフォームでrequeryされるようになっています。 わからない点は、MAIN_FORM1にtextbox1に、サブフォームの「数量の合計フィールド」の合計を表示したいと思います。 textbox1のコントロールソースに、「=Sum([Forms]![月報サブフォーム]![数量の合計])」をやりましたが、うまく表示ができません。エラーと表示されます。どのように注文フォームに表示されている、「数量の合計フィールド」の合計をテキストボックスに表示できるでしょうか?

  • サブフォームにフィルタをかけたい

    サブフォームにフィルタをかけたいのですが エラーになってしまいます。 下記がエラー内容です。 ---------------------------------------------------------- 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ---------------------------------------------------------- 細かい概要は テーブル1にフィールドがあり、 レコードには「あああ」と入力されています。 テーブル1がレコードソースとされている「フォーム(2)」をサブフォームとして 親フォーム(フォーム名:フォーム(1))に乗せました。 フォーム(1)を開いた時にフォーム(2)にフィルタをかけたいのですが うまくいきません。 オブジェクト名にカッコを付けているため、 Form_フォーム・・・・ というコードは書けないので ---------------------------------------------------------- Private Sub Form_Open(Cancel As Integer) Forms("フォーム(1)").Controls("フォーム(2)").Form.Filter = "フィールド = '" & "*あ*" & "'" Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True End Sub ---------------------------------------------------------- としています。 Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True でエラーになりますが、 この行をなくしたら、フィルタがかかりません。 どうすればサブフォームにフィルタをかける事が出来るのでしょうか? ご教示よろしくお願い致します。

  • サブフォームにした方がいいのか親フォームがいいのか

    単票・帳票フォームで使う場合、 サブフォームにした方がいいのか親フォームのままのほうがいいのか。 アクセスでフォームでデータを表示する際に、 フォームのデータシートビューの場合は、 フォームヘッダーにコントロールを置けないから、 データシートをサブフォームとして、親フォームに乗せてコントロールを設置しますが、 単票・帳票フォームの場合は、フォームヘッダーにコントロールが置けますよね。 その場合でもデータシートビューのように サブフォームにした方が良いのでしょうか? そもそもどういう時にサブフォームにした方が良いのかわかりません テーブルやクエリのデータをフォームとしてデータシートビューで表したい上、 コントロールも設置したい時にサブフォームにするべきで、 それ以外(単票・帳票フォーム)はフォームのまま使うべきでしょうか? 添付の画像は、 帳票フォームをサブフォームに載せずにコマンドボタンなどを置いたバージョンです。

  • 親ウィンドウのフォームの値を変更

    showModalDialogでオープンした子画面から、returnValueで値を返すのとは違う方法で、親ウィンドウのフォームの値を変更したいと思っています。 (その子画面をオープンすると同時に、親ウィンドウのフォーム値を変更したいため) その際に    window.opener.document.formA.hiddenA.value = "aaa" という風に記述しているのですが、「window.opener.documentはオブジェクトではありません」というエラーになってしまいます。window.openで開いた子画面からだと、この方法でできたと思うのですが・・・どうすれば変更できるでしょうか?そもそも、showModalDialogでオープンした画面から親ウィンドウの値を変更すること自体がダメなのでしょうか? よろしくお願いします。

  • サブフォームのサブフォームの値を参照

    Access2007で親フォームAの中にサブフォームBが入っていて、そのサブフォームBの中にサブフォームCが入っているとします。 この場合、親フォームAからサブフォームCの中のテキストボックスの内容等は参照できないのでしょうか? 一応試しに、親フォームから Me!サブフォームB.Form!サブフォームC.From!テキスト.SetFocus と、ソースに書いたのですが「実行エラー:438」が出てしまいます。 どうにかして参照できないでしょうか? ご存じの方がいらっしゃったらご教授お願いします。

  • ACCESS2003でサブフォームを使う

    すみませんが教えてください。 親フォームの中に、サブフォームを作ります。 サブフォームにはクエリの内容が表示されています。 そのサブフォームの内容を、親フォームに表示させたいです。 (サブフォームをクリックすると、親フォームの内容も切り替わる) VBAが必要なのでしょうか。 もしそうであれば、参考になるページ、もしくはコードを教えていただけるとありがたいです。 現在、親フォームのほうには [Forms]![登録内容クエリ2フォーム]![登録内容マスタのサブフォーム] ![Forms]![内容]と設定しているのですがこのままではうまくいかないのですね;; ヨロシクお願いします。

専門家に質問してみよう