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

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

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

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

1431閲覧

C# Windowsアプリ メインフォームの値を他フォームで参照したい

siiiii

総合スコア6

C#

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2019/09/03 08:05

編集2019/09/03 08:13

前提・実現したいこと

visualstudioのC#でwindowsアプリを作成しているのですが下記のコードで、
フォーム1のtextboxに入力した値をフォーム4で使おうと試みているのですが String bank ...の部分でNullReferenceExceptionが発生してしまいます。
原因等お教えいただけますでしょうか。
String bank = Form1obj.textBox1.Text.Trim(); はsqlのパラメータとしてtextboxに入力し使用するので、textbox1には正しい値を入力しています。

発生している問題・エラーメッセージ

エラーメッセージ System.NullReferenceException' のハンドルされていない例外が ATM.exe で発生しました

該当のソースコード

C#ここに言語名を入力
ソースコード
〔form4〕

public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
}

public Form1 Form1obj;

public Form4(Form1 Form1_Obj)
{

Form1obj = Form1_Obj;

}

private void Form4_Load(object sender, EventArgs e)
{

String bank = Form1obj.textBox1.Text.Trim();

String number = Form1obj.textBox2.Text.Trim();

〔form4呼び出し〕 private void button6_Click(object sender, EventArgs e) { this.Hide(); DialogResult dRet; Form4 Form4 = new Form4(); dRet = Form4.ShowDialog(); } ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。 VisualStudio2013

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

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

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

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

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

y_waiwai

2019/09/03 08:10 編集

Form4を生成してるところはどうなってますか? コードを提示しましょう んで、このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
YAmaGNZ

2019/09/03 08:09

Form4を呼び出す側はどのように書いているのですか?
guest

回答2

0

まず、Form4のほうですが
コンストラクタとして下記のように書いていますが、これでは
Form4(Form1 Form1_Obj)を呼び出したときにInitializeComponentが実行されません。

C#

1public Form4() 2{ 3 InitializeComponent(); 4} 5 6public Form1 Form1obj; 7 8public Form4(Form1 Form1_Obj) 9{ 10 Form1obj = Form1_Obj; 11}

ですので、

C#

1private Form1 Form1obj; 2public Form4() 3{ 4 InitializeComponent(); 5} 6public Form4(Form1 Form1_Obj):this() 7{ 8 Form1obj = Form1_Obj; 9}

とForm4(Form1 Form1_Obj)を呼んだ場合でも基本のコンストラクタを呼び出すようにしてください。

また、実際には作成したForm4(Form1 Form1_Obj)のコンストラクタを呼ばずにForm4()のほうでインスタンスを生成していますのでForm1objはnullのままとなっています。
この為、Form4_LoadForm1objを使用する際にNullReferenceExceptionとなります。

ですので、Form4を生成するときに

C#

1Form4 form4Obj = new Form4(this);

という感じでForm4(Form1 Form1_Obj)のコンストラクタの方を呼び出すようにしてください。
(呼び出し側はForm1に記述してある前提で書いています。別の場所からであれば、thisではなく適切なインスタンスを渡すようにしてください。)

投稿2019/09/03 08:29

YAmaGNZ

総合スコア10222

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

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

siiiii

2019/09/04 06:28

ありがとうございます。参考にさせて頂き、学習いたします。
guest

0

ベストアンサー

Form4 Form4 = new Form4();

これではForm1objに値が入りません

Form4 Form4 = new Form4(this);

と、Form1のインスタンスを渡してください

投稿2019/09/03 08:16

編集2019/09/03 08:18
y_waiwai

総合スコア87719

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

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

y_waiwai

2019/09/03 08:19

回答修正しました
y_waiwai

2019/09/03 08:24

ああ、もひとつ public Form4(Form1 Form1_Obj) { InitializeComponent(); Form1obj = Form1_Obj; } と追加する必要がありますね
siiiii

2019/09/03 08:32

エラーは発生しなくなりました、ご回答ありがとうございます。 が、グリッドビューが動かなくなってしまったので再度修正します、、
siiiii

2019/09/03 08:36

ありがとうございます。解決いたしました。 改めて学習いたします、、 また、teratailでの質問方法も改めます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問