重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。

.NET C#で開発をしている初心者です。
親Form1のReadOnlyにしているtextBox1をダブルクリックしたら、子Form2が表れ、
その中で、ラジオボタンなどで各項目を選択する様になっており、選択した結果の
文字列が、子Form2のReadOnlyにしているtextBox1に表示され、これで良ければ、
決定ボタンであるButton1を押すと、子Form2が閉じられ、元の親Form1のReadOnly
にしているtextBox1に子Form2で決定した文字列が表示される様にしたいのですが、

私がやってうまく行かないのは、子Form2で決定した文字列をClassでsetし、親Form1
に制御が移った時に、classからgetしようとしたのですが、
まず、子Form2が閉じられた時、親Form1はtextBox1にダブルクリックしたままの(後の)
状態、つまりカーソルが残ってる状態で、文字列が表示されない。

子Form2が閉じられた時すぐかもしくは、子Form2の決定ボタンであるButton1を押した
時すぐに親Form1のtextBox1に文字列が表示されていて欲しいのですが、その方法が
分からないので、とりあえず、親Form1のtextBox1のLeaveイベントを発生させて文字列
を表示しています。

どなたかご親切な方、ご教授下さいます様、宜しくお願い申し上げます。

A 回答 (11件中11~11件)

あー、すみません、そこ間違ってました。



親フォームの「オブジェクト」が必要なので、こんな感じになります。

便宜上、親フォームのクラス名をparentForm、子フォームのクラス名をchildFormとしますので適宜読み替えてください。

子フォーム側:
class childForm
{
...
 
 parentForm parent; // 親フォームの参照
 public void setParent(parentForm parent)
 {
  // 親フォームから参照を受け取って保持する
  this.parent = parent;
 }

...
 {
  // 親フォームの関数を呼び出す
  parent.ctlFromChild("文字列");
 }
...
}

親フォーム側:
class parentForm
{
...
 childForm child;
 {
  child = new childForm(); // 子フォーム作成
  // 子フォームに自分のオブジェクト参照を渡す
  child.setParent(this);
 }
...
}

本当はコールバック関数をデリゲートで渡してやる方が筋はいいと思うんですが、今回はこれでOKかと。
上記では親フォームのオブジェクトを登録する関数を作っていますが、コンストラクタで実装してもOKです。

あと、申し訳ないのですがこれは動作試験してないので、これで駄目なら上記の「コールバック関数をデリゲートで渡す」方を紹介します。
    • good
    • 0
この回答へのお礼

長い間この初心者の私にお付き合い下さり、
誠に感謝致します。

おかげさまで、

>// 親フォームの関数を呼び出す
>  parent.ctlFromChild("文字列");

部分を
parent.changeTaxtBo1("文字列");
に変えたらエラーが解消され、
子フォームのテキストボックスに書いた文字列が、
親フォームのテキストボックスに反映される事が
出来ました。

ただThreadや、Invokeなどの意味はまだ今一分からない
のでゆっくり勉強しようと思います。
本当に有難うございました。
今後とも宜しくお願い致します。

お礼日時:2010/11/27 23:56

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