【C#】呼び出し元のフォームが取得できない

基本的なことだけど、ちょっと躓いてしまったので備忘録。

this.Parent の内容が null になる

呼び出し元(親)のフォーム情報を使おうと、this.Parentを使ってみたが、動かしてみると null になっている。

試行錯誤の結果、単純に使い方を間違えていたので、ShowDialogで呼び出した親フォームの情報を取得する方法をまとめておく。

ShowDialogで呼び出したフォーム情報の取得方法

呼び出し元(FormA):
FormB frm = new FormB();
frm.ShowDialog(this);
frm.Dispose();

呼び出し元では、ShowDialogの引数に、thisを指定していくことが必要。

子画面側(FormB):
if (this.Owner.Name == "FormA")
{
  MessageBox.Show("FormAから開かれたよ");
}

まず、ShowDialogで呼び出された子画面にて、親画面を取得するのは、Parentではなく、Ownerで行う。

次に、フォーム情報が渡されるのがShowDialogの引数なので、コンストラクタでは使えないことを理解しておくこと。
(Load以降なら問題なし)

どうしてもコンストラクタで使いたい場合は、引数にして直接フォームを渡すしかない。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください