DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームを非表示の状態で開く

環境/言語:[OS : Windows XP Home Edition / 言語 : Visual Basic .NET]
分類:[.NET]

【解決したい問題】

お世話になっています。
BBです。

メインのフォームから、複数のサブフォームにアクセスしています。

メインのフォームを起動した時に、
全てのサブフォームも一度表示させてから閉じることによって、
メインのフォームの起動時に必ずサブフォームのClosingイベントが
発生するようにしたいと思い、
ShowメソッドとCloseメソッドを利用して、
サブフォームをいったん開いて閉じるようにしました。

しかし、その間、当然ですが、
画面上に一瞬、サブフォームが表示されてしまいます。
そこで、サブフォームを非表示の状態で開こうと考えて、
SubForm1.Visible=False
というコードを加えました。
しかし、Showメソッドの前後どちらに追加しても、
画面上に一瞬、サブフォームが表示されているようです。

そこで、LabelやTextBoxを最初から非表示にする時に、
プロパティウィンドゥ内で、動作−VisibleをFalseにしていたので、
サブフォームのVisibleプロパティを最初から非表示に設定して、
表示させたい時にだけ、VisibleプロパティをTrueにしようと
考えたのですが、なぜかフォームのプロパティウインドウ内には、
Visibleプロパティがありませんでした。

では、このような場合、どのような方法があるのかご存知でしたら、
教えていただけないでしょうか?

宜しくお願いいたします。
> では、このような場合、どのような方法があるのかご存知でしたら、
> 教えていただけないでしょうか?

今のところあまりよい手はなさそうです。
WinForm は、ウィンドウの実体化=Show みたいなところがあるので。

逃げ手としては

・大きさを0にしておく
・位置を画面外に設定しておく
・最小化しておく

なんて辺りがお手ごろかと。
> 全てのサブフォームも一度表示させてから閉じることによって、
> メインのフォームの起動時に必ずサブフォームのClosingイベントが
> 発生するようにしたいと思い、

Closingを発生させたい理由がわからないのですが、差し支えなければ教えてください。

ひどりさんの例はShow前提ですが、別というかクラスですのでNewForm = New Form1でやめておくのも手でしょう。
初回の描画の体感速度を上げたいのであればだめですけど。

仕組みの話になると
Newでコンストラクタが、ShowすることによりLoadイベントが実行されますので
Loadイベントおよびコンストラクタでの初期化の実装に注意したほうがよいでしょう。
ひどりさん、まどかさん、早速の返信ありがとうございました。

とりあえず、ひどりさんに教えていただいた方法を、
試してみようと思います。

Closingを発生させたい理由ですが・・・

上手く説明できませんが、
サブフォーム内の情報をパブリック変数に格納し、
ファイル出力しているのですが、
ファイルを開く場合には、各サブフォームの
Loadイベントで情報を表示し、
Closingイベントで格納するようにしています。
また、各サブフォームのClosingイベント発生時に
変更される変数は、各サブフォームへ、
複雑に影響しあっています。
そのため、ファイルを開く場合には、あるシーケンスに従って、
ファイルの内容を一度、各サブフォームで表示した形にしないと、
そのまま、上書き保存した場合には、
オリジナルのファイルと異なるファイルが作成されてしまいます。

もちろん、他にも方法はあるのですが、
各サブフォーム単位で完結した形で作成しているので、
最も容易だと考えられたのが、
必ずClosingイベントを発生させること、
だと考えました。

どうでしょう?
理解して頂けたでしょうか?

お二方とも本当にありがとうございました。



■No15302に返信(渋木宏明(ひどり)さんの記事)
>>では、このような場合、どのような方法があるのかご存知でしたら、
>>教えていただけないでしょうか?
>
> 今のところあまりよい手はなさそうです。
> WinForm は、ウィンドウの実体化=Show みたいなところがあるので。
>
> 逃げ手としては
>
> ・大きさを0にしておく
> ・位置を画面外に設定しておく
> ・最小化しておく
>
> なんて辺りがお手ごろかと。
>
■No15305に返信(まどかさんの記事)
>>全てのサブフォームも一度表示させてから閉じることによって、
>>メインのフォームの起動時に必ずサブフォームのClosingイベントが
>>発生するようにしたいと思い、
>
> Closingを発生させたい理由がわからないのですが、差し支えなければ教えてください。
>
> ひどりさんの例はShow前提ですが、別というかクラスですのでNewForm = New Form1でやめておくのも手でしょう。
> 初回の描画の体感速度を上げたいのであればだめですけど。
>
> 仕組みの話になると
> Newでコンストラクタが、ShowすることによりLoadイベントが実行されますので
> Loadイベントおよびコンストラクタでの初期化の実装に注意したほうがよいでしょう。
解決済み!
・Opacityを0にして透明にする。(できる環境であれば)

というのも参考までに加えさせてください。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板