【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に触れてからホームページ制作を独学で始める。
ベンチャー企業の営業、大手企業のSEを経て、独立。
ここ数年はWEB以外の仕事をしていたため、割と本気で勉強中。

コメントを残す

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