none
フォーム間での値の受け渡し RRS feed

  • 質問

  • プログラミング初心者です。
    急な親の転勤で海外に行くことになって、全く言葉が通じない小学生並みに、私も言語がわかりません…。

    現在Visual C# 2008でシステムの開発に携わっています。
    フォーム間の値の受け渡しについて、助言をお願いします。
    ネットで色々調べたのですが、小難しくて理解できませんでした。


    [Form1]
    ・TextBox1
    ・Button1

    [Form2]
    ・TextBox2

    1.Form1のTextBox1に値(文字)を入力して、Button1をクリックする。
    2.Form2のtextBox2にTextBox1に入力された値(文字)が表示される。

    という、作業をしたいのです。
    できればソース付きで教えていただけると助かります。
    よろしくお願いします。
    • 編集済み Abouty 2009年8月20日 5:15
    2009年8月19日 8:09

回答

  • むかーしまとめたネタですが。
    まぁ、ソース付きなので。。。

    http://dotnetfan.org/forums/thread/85.aspx


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    • 回答としてマーク Abouty 2009年8月20日 4:45
    2009年8月19日 8:46
  • ネットで色々調べたのですが、小難しくて理解できませんでした。

    どの辺りがわかりにくかったのでしょうか? フォーム間での値の受け渡しといってもやり方がいくつかあります。例えば以下が参考になると思います。

    別のフォームのデータを取得、設定する
    http://dobon.net/vb/dotnet/form/accessanotherformdata.html

    フォーム間というのは実はクラス間と言いかえることができます。クラス同士の連携はオブジェクト指向に欠かせないものです。この視点に立って、もう一度フォーム間での値の受け渡しを考えてみられると良いと思います。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク Abouty 2009年8月20日 4:45
    2009年8月20日 2:44
    モデレータ
  • ご提示されたソースで動作上は問題ないでしょう。しかし、動作することとコードに意味があることとは別問題です。
    例えば、
    int a = 1000 / 100 * 1;

    int a = 10;
    と同じですが、最初のコードの1000 / 10 * 1;に通常は意味はありません。
    #1000人 / 10グループ * 1日 というように意味がある場合もあるでしょう。

    今後、動作すればOKではなく、こういった意味のあるコードが書けることを目指されると良いと思います。
    今回の例で言えば、Form2のメンバとしてaaが必要かどうかということです。aaが単なる受け渡しのためのワークであれば、Form2クラスの設計上、必要ないメンバーかもしれません。最初は値の受け渡しにばかり目が行くかもしれませんが、慣れるに従ってクラスをどのように設計するかということに目を向けられると良いと思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク Abouty 2009年8月20日 10:14
    2009年8月20日 7:44
    モデレータ

すべての返信

  • むかーしまとめたネタですが。
    まぁ、ソース付きなので。。。

    http://dotnetfan.org/forums/thread/85.aspx


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    • 回答としてマーク Abouty 2009年8月20日 4:45
    2009年8月19日 8:46
  • ネットで色々調べたのですが、小難しくて理解できませんでした。

    どの辺りがわかりにくかったのでしょうか? フォーム間での値の受け渡しといってもやり方がいくつかあります。例えば以下が参考になると思います。

    別のフォームのデータを取得、設定する
    http://dobon.net/vb/dotnet/form/accessanotherformdata.html

    フォーム間というのは実はクラス間と言いかえることができます。クラス同士の連携はオブジェクト指向に欠かせないものです。この視点に立って、もう一度フォーム間での値の受け渡しを考えてみられると良いと思います。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク Abouty 2009年8月20日 4:45
    2009年8月20日 2:44
    モデレータ
  • 小野@どっとねっとふぁん 様

    回答ありがとうございます。
    参考にさせていただきました。

    trapemiya 様

    回答ありがとうございます。
    教えていただいたサイト様は質問する前に読んでいたのですが、
    ソースをどこに代入すればいいのか、いまいちわかりませんでした。



    色々と試行錯誤した末、無事解決しました。
    最終的に以下のソースで実行できました。

    【Form1のソース】

    using System;
    using System.Windows.Forms;

    namespace aaaaa
    {
        public partial class Form1 : Form
        {
            public Form1()
            {           
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2(this.textBox1.Text);
                frm2.Show();
            }

            public string Form1Text
            {
                get
                {
                    return textBox1.Text;
                }
                set
                {
                    textBox1.Text = value;
                }
            }
            private void textBox1_TextChanged(object sender, EventArgs e)
            {

            }
        }
    }


    【Form2のソース】

    using System;
    using System.Windows.Forms;

    namespace aaaaa
    {
        public partial class Form2 : Form
        {
            string aa;
            public Form2(string a)
            {
                aa = a;
                InitializeComponent();
                Form2_Load();
            }

            public Form1 frm1;

            private void Form2_Load()
            {
                textBox2.Text = aa;
            }

            private void textBox2_TextChanged(object sender, EventArgs e)
            {
            }
        }
    }

    2009年8月20日 5:14
  • ご提示されたソースで動作上は問題ないでしょう。しかし、動作することとコードに意味があることとは別問題です。
    例えば、
    int a = 1000 / 100 * 1;

    int a = 10;
    と同じですが、最初のコードの1000 / 10 * 1;に通常は意味はありません。
    #1000人 / 10グループ * 1日 というように意味がある場合もあるでしょう。

    今後、動作すればOKではなく、こういった意味のあるコードが書けることを目指されると良いと思います。
    今回の例で言えば、Form2のメンバとしてaaが必要かどうかということです。aaが単なる受け渡しのためのワークであれば、Form2クラスの設計上、必要ないメンバーかもしれません。最初は値の受け渡しにばかり目が行くかもしれませんが、慣れるに従ってクラスをどのように設計するかということに目を向けられると良いと思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク Abouty 2009年8月20日 10:14
    2009年8月20日 7:44
    モデレータ
  • trapemiya 様

    再び回答ありがとうございます。

    なるほど。勉強になります。
    今回はaだけではエラーが出てしまったので、aaを使いました。
    他にどう書いていいかわかりませんでした;
    動作を成功させることに精一杯で、クラスの設計まで頭が追いついてないです…。
    徐々に意味のあるコードが書けるよう、成長していきたいです。
    2009年8月20日 10:31