- PR -

モーダレスフォームの終了イベントを知ることはできる?

投稿者投稿内容
ガーリック
常連さん
会議室デビュー日: 2005/05/24
投稿数: 22
投稿日時: 2006-02-24 00:54
VB.NET 2003, .NET FrameWork 1.1 で開発しています。

Form1から、Form2をモーダレスで開いた後に、Form2が終了(Close,Dipose)した場合、Form1でそのイベントを取得することは可能でしょうか?
もし取得できないとすれば、Form2が終了したという情報を取得する方法はあるのでしょうか?

Form1からForm2を開く方法は、以下の様にしています。

Class Form1


dim frm as Form1

frm = New Form1
frm.Show()



End Class
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-02-24 01:02

普通に Closed イベントを処理するだけですが。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-24 01:34
Form2 の Closed イベントを Form1 で取得したいのですか?
Form2 で起きたことは Form2 で処理しましょう。

方法はないわけではないです。
Form1 に Form2 の Closed イベント ハンドラを仕込んだり、
終了通知することで可能ですが、依存関係ができちゃいますので止めた方が良いでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-02-24 01:50
引用:

じゃんぬねっとさんの書き込み (2006-02-24 01:34) より:
Form2 の Closed イベントを Form1 で取得したいのですか?
Form2 で起きたことは Form2 で処理しましょう。


んー、Form2自体に結び付いた後始末ならForm2自身でやるべきでしょうけど、
モードレスフォームが閉じたときにってのはありそうな気もしますが。
まあ場合によりますけど、まずい方向の話じゃないようにも思います。

でまあ、やりたいならイベントをハンドルするだけですね。
Application.Exitなんかを使ってるのなら、場合によっては注意が必要ですが。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-24 02:09
引用:

なちゃさんの書き込み (2006-02-24 01:50) より:

んー、Form2自体に結び付いた後始末ならForm2自身でやるべきでしょうけど、
モードレスフォームが閉じたときにってのはありそうな気もしますが。
まあ場合によりますけど、まずい方向の話じゃないようにも思います。


確かに何をするかにも因りますね。

ただ、Form1 と Form2 が並行している状況で、
Form2 を閉じたら「何かする」というのが Windows GUI 的には思いつかないんですよね。
そういう場合って ShowDialog メソッドを使うべき場面になっちゃいますし。

いずれにしても、「何の目的で」というのを元質問者さんに聞くべきでした...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2006-02-24 09:45
引用:


Form2 を閉じたら「何かする」というのが Windows GUI 的には思いつかないんですよね。



コード:


MyToolWindow tw = new MyToolWindow();
tw.Owner = this;
this.MenuItem_表示_ツールウィンドウ.Checked = true;
tw.Closed += delegate {
 this.MenuItem_表示_ツールウィンドウ.Checked = false;
};
tw.Show();



とか?クラスフィールドにしたりとか、Containerにぶち込んどいたほうがいいとかいろいろありますがそれはそれとして。
どっちにしろまずいものでもないでしょう。そもそも貼り付けたコントロールだって何の関係もないはずのFormで処理してたりするんだから。
いや、まぁこのレベルの質問をしてくるということは設計的にまずいところがあるはずだと思う気持ちも分からないでもないんですけど。

ちなみにこんな感じにイベントを登録します>ガーリックさん。VBですからたぶんAddHandlerとかいうので追加できます。

コード:


Dim frm = New Form1
AddHandler frm.Closed AddressOf メソッド名
frm.Show()



こう?VBはほとんど書いたことがないのでいい加減ですが

[ メッセージ編集済み 編集者: ya 編集日時 2006-02-24 09:49 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-24 10:23
引用:

yaさんの書き込み (2006-02-24 09:45) より:

コード:

    Dim frm = New Form1
    AddHandler frm.Closed AddressOf メソッド名
    frm.Show()


こう?VBはほとんど書いたことがないのでいい加減ですが


カンマが抜けているだけっす。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-02-24 11:13
引用:

ただ、Form1 と Form2 が並行している状況で、
Form2 を閉じたら「何かする」というのが Windows GUI 的には思いつかないんですよね。
そういう場合って ShowDialog メソッドを使うべき場面になっちゃいますし。

いずれにしても、「何の目的で」というのを元質問者さんに聞くべきでした...


思いつくのはヘルプツールウィンドウ的なものでフォーム間で情報をペーストするやつとか。
でもって、親フォームには表示するツールバーボタンがあってそのPushedなどを変化させるとか。

スキルアップ/キャリアアップ(JOB@IT)