- PR -

新しいフォームが開く前に前のフォームが閉じてしまう

1
投稿者投稿内容
たっと
会議室デビュー日: 2004/04/13
投稿数: 10
投稿日時: 2004-04-20 12:46
フォームAからフォームBを表示して、Aを隠すことをしたいのですが、
表示が遅いのか、Bが表示される前にAが隠れてしまいます。

私の書き方がわるいのでしょうか。

どなたか、おわかりになる方、よろしくお願いします。

▼--フォームAのBを呼び出すメソッド--▼
formB As New formb
formB.Owner = me
formB.showdialog
▲----------------------------------▲


▼-----フォームBのLoadメソッド------▼
Me.Owner.hide()
以後、処理がいくつか...
▲----------------------------------▲
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-20 13:10
Form.Loadイベントの説明を見てください。
フォームが初めて表示される直前に発生します
と書いてあります。
たっと
会議室デビュー日: 2004/04/13
投稿数: 10
投稿日時: 2004-04-20 14:22
回答ありがとうございます。
Form.Loadは直前でした。私の認識ちがいでした。すみません。


そうなると、
フォームAからフォームBを表示して、Aを隠すことをしたいのですが、
どのような構成になるのがいいのでしょうか。
皆さんはどのように実現していらしてますか?

ちなみにAがBをshodwdialogで呼んでいるのは、Bを閉じてAに戻ってきたときに
後処理を行っているためです。

識者の方、よろしくお願いします。
NowhereMan
会議室デビュー日: 2004/03/29
投稿数: 10
投稿日時: 2004-04-20 16:10
Form.Activatedイベントが利用できるんじゃないでしょうか。
ただし、Activatedイベントは初期起動時以外でも発生するので
注意が必要です。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-20 16:32
フォームが2,3個の使い捨てプログラムというならActivatedでもPaintでもいいかもしれませんが、そうでないならフォーム全体を司るオブジェクトを作ると良いかもしれませんね。「どのフォームを表示する」、「どのフォームを非表示にする」等を操作する役割を持った。

あるいは、初めてPaintイベントが発生した時に発生するイベントをFormBに作るとか。
FormAではそれを受けて自分を非表示にするというのはどうです。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-04-20 16:41
個人的なやり方…

FormA(FormBを表示する側)に、Activatedイベントにマッチするメソッドを用意する。
このメソッドでは、すぐにActivatedイベントからメソッドをはずす。
その後、自分自身を非表示にする。

FormBを表示するときは、FormBのインスタンス作成後、Activatedイベントに上記のメソッドを追加後、ShowDialogで表示する。

※単に、操作される側のフォームに手を入れたくない(条件を付けたくない)場合に使うやり方です。

たくさんあるなら、一郎さんの仰るように何らかの管理クラス等を用意した方がいいかもしれません。
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2004-04-20 18:46
FormAのほうで

コード:

//FormBを表示します。
private void ShowFormB()
{
 this.BeginInvoke(new MethodInvoker(HideFormA));
 FormB form = new FormB();
 form.ShowDialog(this);
 //後処理...
}

private void HideFormA()
{
 this.Hide();
}



これだとFormBでは何もやる必要ないです。ただ、ちょっとトリッキーかも。
たっと
会議室デビュー日: 2004/04/13
投稿数: 10
投稿日時: 2004-04-21 15:59
回答ありがとうございます。

画面表示をコントロールするオブジェクトを作るのが
一番皆が使うにはよさそうですね。

ちょっと作りを考え直して見ます。
ありがとうございました。
1

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