大人になっても苦手な食べ物、ありますか?

メインのフォームからサブのフォームを呼び出して、
サブのフォ-ムからさらにクラスを呼び出し、
クラスからメインのテキストボックスのテキストに書き込むプログラムを作成中です。

ですが、テキストボックスがパブリックにも関わらず、表示されません。
デバックで見る限り、テキストボックスのテキストには値が入っているのですが、
フォームを見ると表示されていません。

知恵をお貸しください。

A 回答 (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 …
    • good
    • 0
この回答へのお礼

回答遅くなって済みません。

やっとできました。
今まで丁寧に教えて頂きありがとうございました。

お礼日時:2007/12/10 10:02

Mainのコードもお願いすればよかったですね。


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

この回答への補足

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

補足日時:2007/12/07 11:53
    • good
    • 0

出来れば、ソースを載せていただけるとレスがつきやすいとおもいますよ。

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

この回答への補足

解答ありがとうございます。
ソースと説明です。

【メインフォーム】
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をつかっても結果は変わりませんでした)

補足日時:2007/12/06 10:06
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A