質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

2989閲覧

Form2でForm1の値を変更

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

0クリップ

投稿2017/10/20 01:31

初歩的な質問かもしれませんが、題の通り、Form2の画面のボタンを押したらForm1のlabelのTextを変更したいです。

C#

1public partial class Form1 : Form 2 { 3 Form2 form2 = new Form2(); 4 public Form1() 5 { 6 InitializeComponent(); 7 } 8 9 private void button1_Click(object sender, EventArgs e) 10 { 11 form2.Show(); 12 } 13 } 14 15public partial class Form2 : Form 16 { 17 Form1 form1; 18 public Form2() 19 { 20 InitializeComponent(); 21 } 22 23 private void button1_Click(object sender, EventArgs e) 24 { 25 if(form1 == null) 26 { 27 form1 = new Form1(); 28 } 29 form1.label1.Text = "aaa"; 30 } 31 }

これではできませんでした。
なぜダメなのかも教えていただけると幸いです。
よろしくお願いいたします。

bochan2👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Form2 に From1 を引数に取るコンストラクタを追加して、

public partial class Form2 : Form { Form1 form1; // Form1 を引数に取るコンストラクタ public Form2(Form1 form1) { InitializeComponent(); this.form1 = form1; } // ・・・略・・・ }

それを Form1 で以下のように使うというのはいかがですか?

public partial class Form1 : Form { Form2 form2; public Form1() { InitializeComponent(); this.form2 = new Form2(this); } // ・・・略・・・ }

投稿2017/10/20 02:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/20 02:49

このような方法があるとは・・・勉強になりました。ありがとうございます。
KSwordOfHaste

2017/10/20 02:58

自分のコード例は「説明のためのもの」という気持ちで書いてしまい実際に使うコードとしてはとても良くないコードです。SuferOnWwwさんのコードの方がはるかによいです。 変な回答をしてしまって申し訳ないです。実際のコードはぜひSuferOnWwwさんの回答どうりにしてください。BAもぜひSuferOnWwwさんの方へ変えていただければと思います。
退会済みユーザー

退会済みユーザー

2017/10/20 03:31

ご丁寧にありがとうございます。BAを変更させていただきましたが、KSwordOfHasteさんのご説明わかりやすかったです。ありがとうございます。
guest

0

追記:SuferOnWwwさんの回答へコメントしましたが、自分の対処例は「考え方」を書いたつもりで、コードとしては非常によくありませんでした。特にform1をpublicにしてForm2クラス以外から設定する点がまったくイケてません。普通はSuferOnWwwさんのコードを書くと思います。

ヘンテコなコード例を挙げてしまい申し訳ありませんでした。


form1がnullだからです。

form1.label1.Text = "aaa"を実行する際、まずform1.label1を参照しようとしますが、form1がnull(どのインスタンスも指していない)ならlabel1の参照のしようがありません。

Form2.form1の初期化をしましょう。とりあえず動けばよいのであれば、

  • Form2のform1フィールドをpublicにする
  • Form2のform1フィールドへForm1のインスタンスを初期設定する

Form1のコンストラクターを次のようにすると初期設定できます。

C#

1public Form1() { 2 InitializeComponent(); 3 form2.form1 = this; //<==この行を追加 4}

投稿2017/10/20 02:01

編集2017/10/20 03:05
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/20 02:48

やりたいことができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問