• ベストアンサー

子フォームから親フォーム上のコントロールを操作したい

VC++.NET(C++/CLI)にてアプリケーションを開発しております。 親フォーム(FormParent)と子フォーム(FormChild)があり 子フォームから親フォーム上にあるtextBox1を操作したいのですがうまくいきません。 親フォームからはFormChild.hをインクルードすることで 親フォームのインスタンスを得て、子フォームを表示させているのですが これに加えて子フォームからFormParent.hをインクルードすると循環参照(と言うのですか?) となる為にエラーになってしまいます。 よろしくお願いします。

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

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.2

VC++は使ってませんのでC/C++一般の問題としての回答です。 子フォームのヘッダファイル内で親ファイルのヘッダをインクルードしてませんか? それなら、子フォームのソースファイル(*.cpp)内でインクルードするようにすればよいはずです。 ただ、子フォームから親フォームが見えるようにする(親フォームのヘッダをまるまるインクルードする)のはあまり綺麗な設計とは思えません。 子フォームにtextBoxを操作する関数を作り、引数としてtextBoxのポインタなり参照なりを渡すようにすれば、子フォームが親フォームのヘッダをインクルードする必要はなくなりますが。 ※子フォームは当然textBoxの型は知っているという前提。

presence2006
質問者

補足

お返事ありがとうございます。 textBoxのポインタを引数に渡すことで目的としていたことが できるようになりました。ありがとうございました。

その他の回答 (1)

noname#53955
noname#53955
回答No.1

どうも(・∀・) ☆子フォームに、親フォームの関数(textBox1を操作する関数) を呼び出させて、操作する はどうでしょうか? クラスなどで管理しているので、 直接操作する関数をpraiavte関数として それを呼び出す関数をpublic関数とすれば、 外部からも操作は可能となります。 フレンド関数でもいいですけど、 あとは、自分がどのようにプログラムを管理したいかによって仕様は変わってきますね♪

presence2006
質問者

お礼

ご回答ありがとうございます。 なるほど。。。 しかし、親フォームの関数を子フォームから呼び出すには 子フォームは親フォームのヘッダファイル(Form1.h)を インクルードしなければならないと思うのですがどうなんでしょうか?

関連するQ&A

  • MDIの親フォームから子フォームの操作

    VB2010のMDIの親フォームからの操作に関してです。 MDIで設定された親フォームのMenuStripから子フォームのTextBox1のTextの値をMsgBoxで取得したいのです 出来る事なのかどうか分からないですが、初歩的な質問でご迷惑をお掛けします・・・

  • デリゲートで子から親フォームのメソッド実行について

    お世話になります。 .NET C#で開発をしております初心者です。 下記の様なデリゲートで子フォームから親フォームのメソッドを実行 させようとしています。 すると、parent2.MeisaiSyutoku(); の部分で エラーが発生してしまいます。 (エラー内容:NullReferenceExceptionはハンドルされませんでした。        オブジェクト参照がオブジェクト インスタンスに設定されていません。) 同じ子フォームで(親フォームは違いますが)、もう1つデリゲートをやっているのですが それも何か悪かったりするでしょうか。 下記のデリゲートで、デリゲート(2)はちゃんと実行されますが、デリゲート(1)の方でエラー となってしまいます。 どなたかご親切な方、違う方法でも構いませんので、子フォームから 親フォームのメソッドを実行する方法を教えて下さいます様、 宜しくお願い致します。      記 デリゲート(1) 子フォーム側 parent2; //親フォームの参照 public void setOya2(案内書 parent) { this.parent2 = parent; //親フォームから参照を受け取って保持する } private void button2_Click(object sender, EventArgs e) { ~イベント処理~ parent2.MeisaiSyutoku(); //案内書.csのメソッド実行 } 親フォーム側 private void button4_Click(object sender, EventArgs e) { Global.openMOTO = 1; 台帳 n台帳 = new 台帳(); n台帳.setOya2(this); n台帳.Show(); } private delegate void ctlFromChild(); public void MeisaiSyutoku() { new Thread(new ThreadStart(delegate { Invoke((ctlFromChild)delegate { Get_MeisaiSyutoku(); }); })).Start(); } デリゲート(2) 子フォーム側 送り状作成 parent1; //親フォームの参照 public void setOya1(送り状作成 parent) { this.parent1 = parent; //親フォームから参照を受け取って保持する } private void fpSpread1_CellDoubleClick(object sender, CellClickEventArgs e) { ~イベント処理~ parent1.changeTextBox4(zOtodokeSaki);         } 親フォーム側 private void button1_Click(object sender, EventArgs e) { Global.openMOTO = 0; 台帳 n台帳 = new 台帳(); n台帳.setOya1(this); n台帳.Show(); } private delegate void ctlFromChild(); public void changeTextBox4(string str) { new Thread(new ThreadStart(delegate { Invoke((ctlFromChild)delegate { this.textBox4.Text = str; }); })).Start(); }

  • 子フォームから親フォームのオブジェクトを参照したい。

    こんばんわ。 いまVB.Net2005でプログラミングしている者です。 子フォームから親フォームのオブジェクトを参照したいのですが, うまくいきません。 親フォームにListBox1を置き, ここに入力された内容を 子フォームで下記のように参照しようとしました。 Dim 子フォーム As New 子フォーム Label1.Text = 親フォーム.ListBox1.SelectIndex としたのですが, 親フォームでListBox1に0以外のリストを選択したのに, 子側に来ると親フォーム.ListBox1.SelectIndexの値が 0になってしまい,親側での選択内容が反映されません。 どうすれば正しく参照できるでしょうか? 教えてください。よろしくお願いします。

  • C# 親フォームと子フォーム

    今、C#のプログラミングを作成中です。 内容は、 親フォームのボタンをクリック 子フォームのコンストラクタでエラーチェック エラーがあれば、エラーメッセージを出し、子フォームを閉じる エラーがなければ、子フォームが開く というようにしたいと思っています。 今とまっているのは、エラーがあれば、エラーメッセージを出し、子フォームを閉じるという所です。 どういう風に、子フォームにプログラムしたらよろしいでしょうか? それとも、親フォームにてエラーチェックを行うしか方法はないのでしょうか? 誰か分かられる方がいらっしゃいましたら、教えてください。 お願いいたします。

  • C# 親フォームと子フォームのデータのついて

    こんにちは、 今開発して内容は親フォームからチェックしたリストを子フォームのdatagridviewに自動的に追加したり、 チェックを外したら、子フォームのdatagridviewから登録した項目を削除すること作成しています。 親フォームからチェックした項目(データ)を子フォームの関数に渡しているのですが、子フォームのdatagridviewの更新がしなくて、データも反映されていない状況です。 どうすれば良いでしょうか。ご存知でしたら、教えてください。 どうぞよろしくお願いします。

  • 子フォームの情報を親フォームに利用する

    Visual C++初心者です。visual studio2005を使用しています。 まず親フォームで名前を入力させ、「次へ」を押すと子フォームが出て来ます。 そこで好きな食べ物を入力させて「決定」ボタンを押すと子フォームが閉じ、親フォームのテキストボックスに 「○○さん、こんにちは!好きな食べ物は●●ですね」というメッセージを表示させる・・・というフォームアプリケーションを作りたいのです。 子フォームの表示は分かるのですが、そこで入力させた情報を親フォームに反映させる方法が分かりません。 できれば初心者でも分かる回答をして頂ければ有難く思います。 よろしくお願いします。

  • windoswフォームのTextBox操作について

    私は現在、VC++2010のwindowsフォームを使ってアプリケーションの開発を行っています。 与えられた文字列をTextBoxに追加表示という形で表示するプログラムを作成した所、与えられた文字列が目的通りに表示されていくのは確認できました。 しかし、TextBoxがいっぱいになると視覚的には領域の右端にスクロールバーが短くなっていくのみで、TextBoxに表示されている文字列はスクロールせず、結果、新しく表示された文字列は見えません。 これは、カーソルが左上端を位置したまま移動しないことが原因だと思うのですが、常にカーソルを最後尾に持っていく方法などはありませんでしょうか。 文字ばかり長くなりましたが、よろしくお願いします。

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

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

  • MDI:親フォームと子フォームを別EXEで実装するには

    MDIでアプリケーションを作成したいと思っています。 その時に子フォームを親フォームとは別EXEで作りたいと思っています。 例えば 親フォームのボタンを押すと、子フォームEXEが起動し、親フォーム内に表示される。 このようなことは出来ますか? 出来るのでしたら、どうしたらよろしいでしょうか。 教えてください。

  • 子フォームから親フォームへのデータの受け渡し

    いつもお世話になっております。 VB.NETの質問です。 親フォームから子フォームを開き、子フォームで検索した結果を親フォームに返したいです。 はじめはテキストボックスへ表示させており、何の問題もなく出来ていたのですが、 仕様を変更してコンボボックスやラベルのテキストに表示させるようにしたら、子フォームからデータを取れなくなりました。というか表示されなくなりました。子フォームのme.close()する直前の変数の値にはデータが入っているのですが・・・ なんでなんでしょうか? 開発一筋でやられてきた方には、本当に初歩的な質問だと思いますが、 よろしくお願い致します。

専門家に質問してみよう