- PR -

ダイアログボックスから親フォームのコントロール(クラス)を操作する方法。

投稿者投稿内容
がんちゃん
会議室デビュー日: 2002/02/21
投稿数: 12
投稿日時: 2004-03-12 11:49
ダイアログボックス上から、親フォーム上にあるDataSetやDataTableを操作するにはどうすればよいのでしょうか?

MSDN(http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Vbcon/html/vbtskGettingInformationFromDialogBoxsParentForm.asp)

などを参考にして、親フォーム上のDataSetとDataTableのModifiersプロパティをPublicにし、ダイアログボックスに例えば、

  //DialogBoxのロード
  private void Form2_Load(object sender, System.EventArgs e)
  {
    dataSet2 = ((Form1)this.ParentForm).dataSet1.Copy(); //dataSet2は、Form2にあるDataSet
  }

などと言ったコードを書いて実行してみたのですが、System.NullReferenceException例外が発生してしまい、はたと困ってしまいました。

親フォームで元になるcsvファイルを読んで、抽出条件を指定するダイアログボックスを表示し、抽出条件を設定して実行した結果を親フォームに表示する、と言う処理を行いたいのです。

「SVGA環境で使える事」という要求仕様があるので、親フォームはDataGridの表示で手一杯でして…
なにかよい解決策があればご教示ください。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-12 12:00
this.ParentForm
((Form1)this.ParentForm).dataSet1
どちらがNothingでしょうか。
デバッグ実行でクイックウォッチなどで確認してみてください。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-12 12:04
エラーの原因とは別の話ですが

Form2のdataSet2をpublicにして
Form2を開く際にForm1からdataSet2にdataSet1を設定したほうが楽だと思います。
がんちゃん
会議室デビュー日: 2002/02/21
投稿数: 12
投稿日時: 2004-03-12 13:10
引用:

一郎さんの書き込み (2004-03-12 12:00) より:
this.ParentForm
((Form1)this.ParentForm).dataSet1
どちらがNothingでしょうか。
デバッグ実行でクイックウォッチなどで確認してみてください。



すばやいご回答有難う御座います。

確認しましたら、this.ParentForm = null reference となりました。
これは親フォームがnullって事なんでしょうか?

ちなみに親フォームからは

  Form mdlg = new Form2();
  mdlg.ShowDialog(this);

でダイアログボックスを表示しています。

先の投稿で書き忘れていたのですが、現在のところBorland C#Builderを使用
しています。スキル的には今までVisual Basic(Ver.6.0以前)でプログラムを
組んでいました。C#を始めて2週間程度です。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-03-12 13:23
引用:

がんちゃんさんの書き込み (2004-03-12 13:10) より:
確認しましたら、this.ParentForm = null reference となりました。
これは親フォームがnullって事なんでしょうか?


ParentFormはMDIの場合の親フォームじゃないでしょうか?
ShowDialogに渡したフォームはOwnerになります。
がんちゃん
会議室デビュー日: 2002/02/21
投稿数: 12
投稿日時: 2004-03-12 14:33
引用:

なちゃさんの書き込み (2004-03-12 13:23) より:
引用:

がんちゃんさんの書き込み (2004-03-12 13:10) より:
確認しましたら、this.ParentForm = null reference となりました。
これは親フォームがnullって事なんでしょうか?


ParentFormはMDIの場合の親フォームじゃないでしょうか?
ShowDialogに渡したフォームはOwnerになります。



ご指摘のあったParentFormをOwnerに修正して走らせたら、うまくいきました。

まだ手探り状態で、ヘルプやWebサイトなどを調べながら進んでいるような状況
ですが、もっと理解を深められるように努力します。どうも有難う御座いました。


がんちゃん
会議室デビュー日: 2002/02/21
投稿数: 12
投稿日時: 2004-03-12 14:46
引用:

ゆうじゅんさんの書き込み (2004-03-12 12:04) より:
エラーの原因とは別の話ですが

Form2のdataSet2をpublicにして
Form2を開く際にForm1からdataSet2にdataSet1を設定したほうが楽だと思います。




親フォームから子フォームに設定するのですか。
具体的にはどのように行えばよいのでしょう? ヒントだけでも頂ければと思います。
ラフィン
ぬし
会議室デビュー日: 2002/05/23
投稿数: 809
お住まい・勤務地: 外野
投稿日時: 2004-03-12 15:02
ヒントです。

引用:

  Form mdlg = new Form2();
  mdlg.ShowDialog(this);



 この2行の間(つまりインスタンスを作ってから表示する間)では、mdlgはすでに存在しているわけだからある程度の制御はできる。

スキルアップ/キャリアアップ(JOB@IT)