C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

モードレスで表示したFormから呼び出しFormを閉じる方法


(過去ログ 8 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■8430 / inTopicNo.1)  モードレスで表示したFormから呼び出しFormを閉じる方法
  
□投稿者/ くし&しも 二等兵(15回)-(2006/11/21(Tue) 11:43:59)

分類:[C#] 


分類:[C#] 

お世話になります。

今あるフォームForm1がありまして、あるボタンを押したときにForm2を表示させ
モードレスで表示させています。
そして、呼ばれた側のForm2の「終了ボタン」を押したときにForm2とForm1を
閉じるようにしたいのですが、Form2の閉じ方はthis.Close();として閉じています。
現在、呼び出し元のForm1を閉じるのにnew frmJimuLogin().Close();としています。しかし、見た目は閉じているように見えますが、呼び出した時にHideしたForm1オブジェクトと呼ばれた側のForm2で作成したForm1オブジェクトがそれぞれ別オブジェクトだと思うので、どうしてもnew frmJimuLogin()オブジェクトを閉じただけでHideしたForm1オブジェクトはそのままHideされたままメモリに残っているような気がしてならないのです。

この辺のしくみがいまいちわからないのですがどなたかご存知の方教えて下さい!

(Form1の呼び出し側)
Form2 frm2 = new Form2();
frm2 .Show();
this.Hide();

(Form2の呼ばれた側)
// 終了ボタンクリック時
private void btnEnd_Click(object sender, EventArgs e)
{
// 自画面(Form2)クローズ
this.Close();
new frmJimuLogin().Close();// ←この箇所がどうも違うような気がする。
}

以上、よろしくお願いします。


0
引用返信 編集キー/
■8431 / inTopicNo.2)  Re[1]: モードレスで表示したFormから呼び出しFormを閉じる方法
□投稿者/ Blue 大尉(165回)-(2006/11/21(Tue) 11:58:02)

分類:[C#] 

2006/11/21(Tue) 12:00:36 編集(投稿者)

| この箇所がどうも違うような気がする。

違いますね。呼び出されているForm1と別のものを作成して閉じています。
Form1を閉じる処理をイベント(もしくはデリゲート)としてForm2に登録して、
btnEnd_Clickの処理に、その登録したイベントを呼ぶようなつくりにしてはどうでしょうか?

具体的には
http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=5404&no=0&KLOG=31
の5407の魔界の仮面弁士さんのようなコードでしょうかね。

0
引用返信 編集キー/
■8434 / inTopicNo.3)  Re[2]: モードレスで表示したFormから呼び出しFormを閉じる方法
□投稿者/ くし&しも 二等兵(17回)-(2006/11/21(Tue) 15:41:01)

分類:[C#] 

Blueさん、ご返事ありがとうございました。
やはり、呼び出されているForm1と別のForm1を閉じているのですね。
納得しました。

>具体的にはhttp://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?
mode=al2&namber=5404&no=0&KLOG=31の5407の魔界の仮面弁士さんのようなコー>ドでしょうかね。

ロジックは上記をリンク先を参考にして以下のように修正しました。
(Form1の呼び出し側)
private void btnShow_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.ButtonClick += new EventHandler(End_ButtonClick);
frm2.Show();
this.Hide();
}
void End_ButtonClick(object sender, EventArgs e)
{
if (!this.IsDisposed) this.Close();
}

(Form2の呼ばれた側)
// イベント定義
public event EventHandler ButtonClick;

// 終了ボタンクリック時
private void btnEnd_Click(object sender, EventArgs e)
{
// 自画面(Form2)クローズ
this.Close();
if (ButtonClick != null)
ButtonClick(sender, e);
}

登録したイベントを呼ぶようなつくりにしてみました。
Blueさん!とても助かりました。
どうもありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -