DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストボックスへの反映

環境/言語:[C#]
分類:[.NET]

form1のtextbox1へ文字入力をしたあと、form1のbutton1で

Form2 hForm2 = new Form2();
hForm2.ShoeDialog();

というのと経て、Form2のtextbox1にform1のtextbox1を表示させるにはどうすればいいですか?

Form2の追加は「新しい項目の追加」というので行っています。
別のフォームのデータを取得、設定する
http://dobon.net/vb/dotnet/form/accessanotherformdata.html

オブジェクト指向言語では、オブジェクトへの参照の考え方が非常に重要です。
この辺りをきちんと理解して、常に意識しましょう。
■No14503に返信(covaさんの記事)
> hForm2.ShowDialog();
> というのと経て、Form2のtextbox1にform1のtextbox1を表示させるにはどうすればいいですか?

本来は、ケースバイケースなのですが、
ShowDialog メソッドであるならば、以下のようなコードになるでしょう。

pubic class Form1 : System.Windows.Forms.Form {

    /* 省略 */

    private void MakiMakiLove() {
        using (Form2 hForm2 = new Form2()) {
            // [OK] ボタンを選択した場合のみであるならば
            //if (hForm2.ShowDialog() == DialogResult.OK) {
                this.textBox1.Text = hForm2.TextBox1Text;
            //}
        }
    }

}

Form2 には TextBox1Text という公開されたプロパティを設けます。
当然 readonly プロパティにします。
不必要なアクセスを失くすことは非常に重要です。

pubic class Form2 : System.Windows.Forms.Form {

    /* 省略 */

    public string TextBox1Text {
        get {
            return this.textBox1.Text;
        }
    }

}

これが OOP の基本ですね。

また、Form2 の項目が増えた場合は、プロパティをデータ クラスか構造体などに変更することで、
Form1 で一括で取得できるようになります。

間違っても、Form1 から Form2 を呼び出しているのにも関わらず、
Form2 自身が Form1 に何かを通知するような実装はあってはなりません。
(これは、OOP 以前に構造化言語からの基本ですね)

__________________________________________________
じゃんぬ Microsoft MVP for Visual Developer - C#
  http://jeanne.wankuma.com/
  http://blogs.wankuma.com/jeanne/
#こっそりと。。。(^^;

■No14507に返信(じゃんぬねっとさんの記事)
>>Form2のtextbox1にform1のtextbox1を表示させるにはどうすればいいですか?
>
> this.textBox1.Text = hForm2.TextBox1Text;
>
> public string TextBox1Text {
> get {
> return this.textBox1.Text;
> }
> }

元の要求と反対に解釈されいますよぉ。。。
■No14510に返信(まどかさんの記事)
> #こっそりと。。。(^^;
> 元の要求と反対に解釈されいますよぉ。。。

あう... 読み違えた。。。
ということで、お詫びに。

pubic class Form1 : System.Windows.Forms.Form {

    /* 省略 */

    private void MakiMakiLove() {
        using (Form2 hForm2 = new Form2()) {
            hForm2.SetTextBox1(this.textBox1.Text);
            hForm2.ShowDialog();
        }
    }

}

pubic class Form2 : System.Windows.Forms.Form {

    /* 省略 */

    public void SetTextBox1(string value) {
        this.textBox1.Text = value;
    }

}


__________________________________________________
じゃんぬ Microsoft MVP for Visual Developer - C#
  http://jeanne.wankuma.com/
  http://blogs.wankuma.com/jeanne/
ありがとうございます。

同じような感じで、form1のtextbox1の内容をform2とform3には表示させないように進んで、form4に表示って出来ますか?

フォームはそれぞれボタンで、
form1→form2→form3→form4と進んでいくものです。
■No14516に返信(covaさんの記事)
> ありがとうございます。
> > 同じような感じで、form1のtextbox1の内容をform2とform3には表示させないように進んで、form4に表示って出来ますか?
> > フォームはそれぞれボタンで、
> form1→form2→form3→form4と進んでいくものです。
form1で入力されたデータを管理するClassやStructをつくりそれを渡していってはどうでしょうか?

class Ahya
{
string hoge;
string hogehoge;
string hogehogehoge;
}

form1---------------
Ahya ahya = new Ahya()
ahya.hoge = textBox1.Text;
ahya.hogehoge = textBox2.Text;
ahya.hogehogehoge = textBox3.Text;
Form2 form2 = new Form2();
form2.ShowDialog(this,ahya);

form2---------------
void ShowDialog(Form owner,Ahya ahya)
{
Form2 f = new Form2();
f.textBox1.Text = ahya.hoge;
f.ShowDialog(owner);
}
void Button_Click(something hogehoge)
{
Form3 form3 = new Form3();
form3.ShowDialog(this,ahya);
}

Form3----------------------------
void ShowDialog(Form owner,Ahya ahya)
{
Form3 f = new Form3();
f.textBox1.Text = ahya.hogehoge;
f.ShowDialog(owner);
}
void Button_Click(something hogehoge)
{
Form4 form4 = new Form4();
form4.ShowDialog(this,ahya);
}
........

というかこういうコードを使用するばめんが分かりませんが…(汗。

DOBON.NET | プログラミング道 | プログラミング掲示板