none
Form間の連動について RRS feed

  • 質問

  • まったくの初心者ですがお許しください。

    まず、Form1にはテキストボックスとボタンがあり、テキストボックス内に文字を入力してボタンをクリックするとForm2が開き特定の場所にその文字を表示させたいのです。

    Form2はもう作ってあり、どこに表示させたいのかもあるのですが、どうやって連携をとるのか分かりません。

    よろしくお願いします。
    2009年7月1日 8:06

回答

  • Form2のコンストラクタに引数で渡すか、Form2にpublicなプロパティかメソッドを作ってはいかがでしょうか?
    2009年7月1日 10:36
  • http://dobon.net/
    ↑の中にある↓のページに、いくつかの方法が紹介されています。
    「別のフォームのデータを取得、設定する」

    今回のケースであれば
    「所有されているフォームの取得」の方法ででできるかとおもいます。

    # どぼん!さんが管理人をされている DOBON.NET を
    # リンクさせていただきました。
    # いつもお世話になっていますm(_ _)m

    2009年7月1日 12:22
  • Form1 にあるテキストボックスコントロールの名前が textBox1 、ボタンコントロールの名前が button1 であるとして、
    Form2 の特定の場所に表示する方法が Label コントロール(名前は label1 ) だとすると
    以下のようなのでとりあえずできますね(いいコードだとは思いませんが)。

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm = new Form2();
                frm.Controls["label1"].Text = textBox1.Text;
                frm.Show();            
            }

    この場合は、Form1 に配置したボタンをダブルクリックすると

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

    の部分は自動でできるので、三行書くだけです。

    実際の具体的な処理の内容などによってはもっといろいろ考えないといけないかもしれません。
    • 編集済み SweetSmile 2009年7月1日 15:51
    • 回答の候補に設定 kassyi 2009年7月6日 14:43
    • 回答としてマーク 高橋 春樹 2009年7月10日 5:09
    2009年7月1日 15:49
  • ソースまでありがとうございます。
    試しましたところ、
    エラー 1 型または名前空間名 'Form3' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 
    というエラーが出てしまいました。
    このスレッド及び直接のリンク先では、Form3という単語は出てきていなかったと思います。
    (編集されて消えたのなら別ですが…)

    基本的にForm1、Form2、Form3、...、FormNはご自身で作成されたフォームのいずれかを当てはめて下さい。
    どれが当てはまるかは状況によります。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年7月2日 13:55
    モデレータ
  • 上記のコードで言えば、Form1とForm2は同じ名前空間に存在する必要があります(※1)。ソースコードの上の方に書かれているnamespaceは一致していますか? また、ソースコードに書かれているClassの横はForm2になっていますか?(つまりクラス名がForm2です)

    ※1 Usingで名前空間を指定するなどすれば、同じ名前空間である必要はありません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年7月3日 4:15
    モデレータ
  • コードを示していただかないと、間違ってるんじゃないですか?としか言いようがないですね…。
    結構いじって混乱しているようにも見えるので、一度新規にプロジェクトを作ってForm間の連携だけに
    絞った小さなアプリケーションで試してみるといいと思います。


    かずき Blog:http://blogs.wankuma.com/kazuki/
    2009年7月3日 11:25

すべての返信

  • Form2のコンストラクタに引数で渡すか、Form2にpublicなプロパティかメソッドを作ってはいかがでしょうか?
    2009年7月1日 10:36
  • ありがとうございます。
    ・・・ですが、まったくの初心者なので難しい単語だけだと・・・すみません。

    できたらもうすこし詳しくお願いします。

    2009年7月1日 11:03
  • http://dobon.net/
    ↑の中にある↓のページに、いくつかの方法が紹介されています。
    「別のフォームのデータを取得、設定する」

    今回のケースであれば
    「所有されているフォームの取得」の方法ででできるかとおもいます。

    # どぼん!さんが管理人をされている DOBON.NET を
    # リンクさせていただきました。
    # いつもお世話になっていますm(_ _)m

    2009年7月1日 12:22
  • Form1 にあるテキストボックスコントロールの名前が textBox1 、ボタンコントロールの名前が button1 であるとして、
    Form2 の特定の場所に表示する方法が Label コントロール(名前は label1 ) だとすると
    以下のようなのでとりあえずできますね(いいコードだとは思いませんが)。

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm = new Form2();
                frm.Controls["label1"].Text = textBox1.Text;
                frm.Show();            
            }

    この場合は、Form1 に配置したボタンをダブルクリックすると

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

    の部分は自動でできるので、三行書くだけです。

    実際の具体的な処理の内容などによってはもっといろいろ考えないといけないかもしれません。
    • 編集済み SweetSmile 2009年7月1日 15:51
    • 回答の候補に設定 kassyi 2009年7月6日 14:43
    • 回答としてマーク 高橋 春樹 2009年7月10日 5:09
    2009年7月1日 15:49
  • ソースまでありがとうございます。
    試しましたところ、
    エラー 1 型または名前空間名 'Form3' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 
    というエラーが出てしまいました。

    どうにか回避する方法はないでしょうか?
    多分Form3の定義みたいなものを入れるんじゃないかなあ・・・と、思っていますが。
    2009年7月2日 5:07
  • ソースまでありがとうございます。
    試しましたところ、
    エラー 1 型または名前空間名 'Form3' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 
    というエラーが出てしまいました。
    このスレッド及び直接のリンク先では、Form3という単語は出てきていなかったと思います。
    (編集されて消えたのなら別ですが…)

    基本的にForm1、Form2、Form3、...、FormNはご自身で作成されたフォームのいずれかを当てはめて下さい。
    どれが当てはまるかは状況によります。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年7月2日 13:55
    モデレータ
  • ありがとうございます。

    あ、はじめForm2を作ったのですが同じエラーが出てしまったので、Form3を作り直したところ、やはり同じエラーがでたということです。

    言葉足らずですみません。。。

    2009年7月3日 3:29
  • 上記のコードで言えば、Form1とForm2は同じ名前空間に存在する必要があります(※1)。ソースコードの上の方に書かれているnamespaceは一致していますか? また、ソースコードに書かれているClassの横はForm2になっていますか?(つまりクラス名がForm2です)

    ※1 Usingで名前空間を指定するなどすれば、同じ名前空間である必要はありません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年7月3日 4:15
    モデレータ
  • う~~~ん、すみませんが調子が悪い。。。

    namespace AAA
    で一緒になっています。
    また、もちろんForm3がForm4になっていることはありません。。。

    エラーは出ないのですが、はじめっからForm3が出てしまいます。

    2009年7月3日 8:48
  • コードを示していただかないと、間違ってるんじゃないですか?としか言いようがないですね…。
    結構いじって混乱しているようにも見えるので、一度新規にプロジェクトを作ってForm間の連携だけに
    絞った小さなアプリケーションで試してみるといいと思います。


    かずき Blog:http://blogs.wankuma.com/kazuki/
    2009年7月3日 11:25
  • みなさん、ありがとうございました。
    もう一度作り直したところ、できました。

    何が原因だったかは分かりませんが、このようなことで解決できたことを皆さんに何度も聞いてしまったことを、お詫びします。。。

    私も、もっと勉強しないと・・・。

    といわけで、ありがとうございました。

    2009年7月3日 11:29
  • こんにちは、フォーラムオペレータの高橋春樹です。

    GX999さん、あんにんごさん、SweetSmileさん、Azuleanさん、trapemiyaさん a_かずき_さん
    問題の切り分けアドバイスありがとうございました。

    naepon2009さん、はじめまして。
    MSDNフォーラムのご利用ありがとうございます。

    問題が解決したようなので、有用な情報、もしくは問題の切り分けアドバイスを頂いた皆さんの投稿に
    回答マークを付けさせて頂きました。
    不適切と思いましたら回答マークを削除することも可能です。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年7月10日 5:10