• ベストアンサー

C# 別なフォームへ値を渡す (初心者です)

メインのフォームからサブのフォームを呼び出して、 サブのフォ-ムからさらにクラスを呼び出し、 クラスからメインのテキストボックスのテキストに書き込むプログラムを作成中です。 ですが、テキストボックスがパブリックにも関わらず、表示されません。 デバックで見る限り、テキストボックスのテキストには値が入っているのですが、 フォームを見ると表示されていません。 知恵をお貸しください。

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

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.3

普通にメソッドに変数を渡すのと一緒の感じでいいですよ。 例えば、フォームのコンストラクタに渡す感じで。 A_Form : メインフォームの型 B_Form : サブフォームの型 C_Form : 子フォームの型 とします。 class B_Form : Form {  private A_Form main_form;  public B_Form(A_Form a)  {   main_form = a;  } } class C_Form : Form {  private A_Form main_form;  public C_Form(A_Form a)  {   main_form = a;  } } public void some_function() {  A_Form a = new A_Form();  B_Form b = new B_Form(a);  C_Form c = new C_Form(a); } といった感じになるかと。 最後のメソッドはたとえばなので、参考程度に。 http://www.stackasterisk.jp/tech/dotNet/csharp02_01.jsp

yukari87
質問者

お礼

回答遅くなって済みません。 やっとできました。 今まで丁寧に教えて頂きありがとうございました。

その他の回答 (2)

  • ape5
  • ベストアンサー率57% (85/148)
回答No.2

Mainのコードもお願いすればよかったですね。 えっと、現状のところで思ったことは、もしかして、最初に作成されるメインフォームのインスタンスのほかに別のメインフォームのインスタンスを作成してそれのテキストボックスに入れているのではないでしょうか? >>尚、このときshowを使うと、新しいメインフォームがでて、新しいtextboxには表示されてました。 このコメントからたぶんそうだろうと思うのですが、はずしてたらすみません。 もしこれであれば、解決法としては以下のようなものがあるかと思います。 まず整理すると、呼び出されているフォームの関係は、 メインフォーム>>>サブフォーム>>>子フォーム ですので、メインフォームのメンバーのtextboxに文字列を書き込みたいなら、子フォームがメインフォームのインスタンスの情報を持っていなければ書き込むことができません。ということは、メインフォームのインスタンスのデータを(便宜的にinstanceとします)受け渡さないといけません。 メインフォーム>>instanceを渡す>>サブフォーム>>instanceを渡す>>子フォーム で、子フォームでその値を使って instance.textbox.Text = "aaaa"; でいいと思います。 (実際に動かしているわけではないので、うまく動かないときはすみません。レスくれましたら、対応したいと思います。)

yukari87
質問者

補足

>>えっと、現状のところで思ったことは、もしかして、最初に作成されるメインフォームのインスタンスのほかに別のメインフォームのインスタンスを作成してそれのテキストボックスに入れているのではないでしょうか? まさしくビンゴです。 まったくの初心者なので恥ずかしいですが、「インスタンスのデータを受け渡さないといけない」とのことですが、インスタンスを渡すコードかそれを説明しているサイトを教えて頂けないでしょうか? 宜しくお願いします。

  • ape5
  • ベストアンサー率57% (85/148)
回答No.1

出来れば、ソースを載せていただけるとレスがつきやすいとおもいますよ。出すところは、 ・メインのフォームのフィールドの定義、サブフォームの呼び出し、メインのフォームのテキストボックスの定義の仕方 ・サブのフォームでのクラスの呼び出し、クラスの定義、クラスの中でのメインのテキストボックスへの書き込みのところ のあたりがあるとよいかもしれません。

yukari87
質問者

補足

解答ありがとうございます。 ソースと説明です。 【メインフォーム】 public class f_main : System.Windows.Forms.Form { 中略 public System.Windows.Forms.RichTextBox textbox; } // textbox // this.textbox.AcceptsTab = true; this.textbox.Location = new System.Drawing.Point(16, 16); this.textbox.Name = "textbox"; this.textbox.Size = new System.Drawing.Size(736, 472); this.textbox.TabIndex = 0; this.textbox.Text = ""; mainMenuの表示をクリックしたらサブフォームのオブジェクトを生成してサブフォームの表示 private void tool_box_Click(object sender, System.EventArgs e) { if(tool_box.Checked == true) { tool_box.Checked=false; obj_s.Opacity=0.0; hide=true; } else if(hide==true) { tool_box.Checked=true; obj_s.Opacity=1.0; } else { tool_box.Checked=true; hide=false; obj_s.Show(); } 【略】 サブフォームからさらにフォームを生成し、値を入力 strclass cobj = new strclass(); String inc=""; 例)inc="aaaa"; cobj.strinclude = inc; cobj.hyouji(); this.Close(); ↓ クラスのオブジェクトを生成し、変数に値を入れて編集して元のメインフォームの呼出(クラス名:strclass) f_main obj = new f_main(); (←メインフォームです) public void hyouji() { obj.textbox.Text = strinclude + inthensu + longhensu + floathensu + doublehensu + charhensu + kansu + kansusyori + syorilast + main + mainsyori + syorilast; } 尚、このときshowを使うと、新しいメインフォームがでて、新しいtextboxには表示されてました。 (クラスをメインフォームから派生させてthisをつかっても結果は変わりませんでした)

関連するQ&A