- - PR -
ダイアログボックスから親フォームのコントロール(クラス)を操作する方法。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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の表示で手一杯でして… なにかよい解決策があればご教示ください。 | ||||||||
|
投稿日時: 2004-03-12 12:00
this.ParentForm
((Form1)this.ParentForm).dataSet1 どちらがNothingでしょうか。 デバッグ実行でクイックウォッチなどで確認してみてください。 | ||||||||
|
投稿日時: 2004-03-12 12:04
エラーの原因とは別の話ですが
Form2のdataSet2をpublicにして Form2を開く際にForm1からdataSet2にdataSet1を設定したほうが楽だと思います。 | ||||||||
|
投稿日時: 2004-03-12 13:10
すばやいご回答有難う御座います。 確認しましたら、this.ParentForm = null reference となりました。 これは親フォームがnullって事なんでしょうか? ちなみに親フォームからは Form mdlg = new Form2(); mdlg.ShowDialog(this); でダイアログボックスを表示しています。 先の投稿で書き忘れていたのですが、現在のところBorland C#Builderを使用 しています。スキル的には今までVisual Basic(Ver.6.0以前)でプログラムを 組んでいました。C#を始めて2週間程度です。 | ||||||||
|
投稿日時: 2004-03-12 13:23
ParentFormはMDIの場合の親フォームじゃないでしょうか? ShowDialogに渡したフォームはOwnerになります。 | ||||||||
|
投稿日時: 2004-03-12 14:33
ご指摘のあったParentFormをOwnerに修正して走らせたら、うまくいきました。 まだ手探り状態で、ヘルプやWebサイトなどを調べながら進んでいるような状況 ですが、もっと理解を深められるように努力します。どうも有難う御座いました。 | ||||||||
|
投稿日時: 2004-03-12 14:46
親フォームから子フォームに設定するのですか。 具体的にはどのように行えばよいのでしょう? ヒントだけでも頂ければと思います。 | ||||||||
|
投稿日時: 2004-03-12 15:02
ヒントです。
この2行の間(つまりインスタンスを作ってから表示する間)では、mdlgはすでに存在しているわけだからある程度の制御はできる。 |