- PR -

[VB.NET]モーダルフォームの起動時のメッセージ表示について。

投稿者投稿内容
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-12-09 14:23
では、Timerで。

_________________
たつごろー
codeseek
こみゅぷらす
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-12-09 14:47
MessageBoxのOwnerをFormAにしてみるのはいかがでしょうか?

in FormA
FormB formB = new FormB();
formB.Owner = this;
formB.ShowDialog();
...

in FormB
MessageBox(this.Owner, ...
...
やんやん
会議室デビュー日: 2004/12/08
投稿数: 7
投稿日時: 2004-12-09 14:47
なるほど。やはり他に方法といえば、Timerしかないでしょうか。
結局のところ、初回起動時のForm_Activatedが完了するまでの間にMessageBoxを表示した際に、VB6ではきちんと呼出元フォームはModalで扱われていたのですが、VB.NETでは不完全なのでしょうか。
MessageBoxを出すタイミングをForm_Activatedが完全に終了した後に持ってこれれば確かに問題はないのですが、Activatedが終了したことを知らせるイベントなどはないでしょうし、それ以降は、ユーザーから何らかの入力がなければイベントが発生しないと思うので、メッセージをどのタイミングで表示させればいいのかがわからなかったのです。
それもひとつの手として考えます。ありがとうございます。
やんやん
会議室デビュー日: 2004/12/08
投稿数: 7
投稿日時: 2004-12-09 15:42
iStation様 ご返答ありがとうございます。

ご提示いただいた内容を試してみましたところ、うまくいきそうです!
呼出元のFormAの変更も、ShowDialg時に、Ownerを指定するだけの変更ですみそうですし、その方向で調整してみたいと思います。

これまでご返答いただいた方々も、ありがとうございました。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-12-09 16:31
P.S.
formB.Owner = this;
formB.ShowDialog();
は、
formB.ShowDialog(this);
と短くなります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-12-09 21:54
ん〜?FormAはさわれなくなるけど、FormBはさわれるような?

 で、Activatedに置くと、例えば他のアプリを起動していて、そのアプリに制御を移し、戻ってくるとまた走っちゃいますよね。そういうのって、いいの?
_________________
やんやん
会議室デビュー日: 2004/12/08
投稿数: 7
投稿日時: 2004-12-09 22:03
こちらで試してみたところでは、FormBもさわれませんでした。
あと、Activatedは、フラグなどを設けて、1度しか通らないように制御しておりますので、不用意にActivatedないの処理が走ることはないようにしています。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-12-10 14:18
Whidbey(VS2005)ではモーダルダイアログが改善されているようですが、VS2003と動作が多少異なる(完璧になった!)ようなので注意ください。
コード:
by Whidbey
this.Activated -= new System.EventHandler(this.FormB_Activated); // for one time call 
MessageBox.Show(this, "Test"); // OK!
this.Close();
...

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