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

フォームをロード時だけ隠したい

環境/言語:[Windows2000/VB.NET]
分類:[.NET]

コントロールを大量に貼っているため
フォームデザイナで画面が出来上がっている間
見た目上あまり良くないので
その間フォームを隠しておきたいのですが、
HideやShow関数、またはVisibleプロパティを用いて
実行すると落ちてしまいます。

なにか良い方法はないでしょうか。
> コントロールを大量に貼っているため
> フォームデザイナで画面が出来上がっている間
> 見た目上あまり良くないので
> その間フォームを隠しておきたいのですが、

すいません。
「フォームデザイナで画面が出来上がっている間」というのが
意味がよくわかりません。

・あるフォームにコントロールを大量に貼っている
・開発環境でそのフォームをデザイナで開く
・すると、コントロールがパラパラと表示される
・これをデザイナを開いたときにパラパラ表示されないようにできないか?

ということですか?
コントロールの量を減らすか、マシンをもっと高性能なものに上げるか、
あるいは、その両方を行うかしないとどうしようもないと思います。

> HideやShow関数、またはVisibleプロパティを用いて
> 実行すると落ちてしまいます。

デザイン時の話ではなく、実行時に
フォームが開かれたときに、コントロールがパラパラと表示されるという意味ですか?
だとして、どのようなコードを書いて、どのような実行結果になったのでしょう?
落ちるとは、例外が発生してアプリが終了してしまう、ということなのか、
それとも本当に何も言わずに画面が消えてしまうのか、はたまたそれ以外なのか、
もう少し具体的に説明して下さい。また、単に「落ちる」ではなくもう少し正確に表現して下さい。
何個はってるんですか?
(マイマシンは2GHzだから再現するかなぁ。。。って2GHzはもう遅い?(^O^;))
■No2712に返信(よねKENさんの記事)
フォームにはラベルを650程度貼っています。

> フォームが開かれたときに、コントロールがパラパラと表示されるという意味ですか?
フォームを隠したい理由としては、まさに↑です。
フォームロード時のコントロールのちらつきを表示させないようにしたいのです。

>どのようなコードを書いて、どのような実行結果になったのでしょう?
コードは、

Private Sub From_Load(省略) Handles MyBase.Load

Me.Visible = False

    'ロード処理

Me.Visible = True

End Sub

といった感じです。
最後の"Me.Visible = True"の部分で

'System.ComponentModel.Win32Exception' のハンドルされていない例外が system.windows.forms.dll で発生しました。

このようなメッセージがでて、処理が中断してしまいます。
うーん。(−−;

例えばだけど、最小化しておくとか、しょっぱなはデスクトップ外
においてあるとか、透明になってるとか、そんなので誤魔化せないかなぁ。

650個もラベル貼るよりPaintでやればもっとマシになるかもしれない
けど。(試してないので「FullTrust」しないように(^^;)
■No2722に返信(IBugFactoryさんの記事)
> 例えばだけど、最小化しておくとか、しょっぱなはデスクトップ外
> においてあるとか、透明になってるとか、そんなので誤魔化せないかなぁ。
参考にします。
ありがとうがざいました。

> 650個もラベル貼るよりPaintでやればもっとマシになるかもしれない
> けど。
上で言っている、Paintとはどういうことですか?

一応ラベルを大量に貼っている理由ですが、
あるモノの配置をラベルの背景色を換えることによって
画面上で再現するPGを作っています。
ですから、一つ一つが単体でコードから操作できるように
したいと思い、このように大量のコントロールになってしまいました。
Gridのセルの背景色を換えて・・・というやり方も考えていたのですが、
ただ見た目上の問題から却下しました。
Paintというのは、Formをキャンバスに見たてて、そこでお絵かき
するようなもんです。
いろんな色のついたPenを持って、楕円を書いたり、塗りつぶし
の■を書いたり。Windowsについてるペイントそのままな感じ。

それがForm上でプログラムからビシバシできると。
詳しくはここを見て、疑問があったらまた聞いてね。v(^^あんまし難しいこと聞かれてもしらないけど。
http://ja.gotdotnet.com/QuickStart/winforms/default.aspx?url=/quickstart/winforms/doc/WinFormsGDIPlus.aspx


■No2723に返信(Daiさんの記事)
> ■No2722に返信(IBugFactoryさんの記事)
>>例えばだけど、最小化しておくとか、しょっぱなはデスクトップ外
>>においてあるとか、透明になってるとか、そんなので誤魔化せないかなぁ。
> 参考にします。
> ありがとうがざいました。
>
>>650個もラベル貼るよりPaintでやればもっとマシになるかもしれない
>>けど。
>
> 一応ラベルを大量に貼っている理由ですが、
> あるモノの配置をラベルの背景色を換えることによって
> 画面上で再現するPGを作っています。
> ですから、一つ一つが単体でコードから操作できるように
> したいと思い、このように大量のコントロールになってしまいました。
> Gridのセルの背景色を換えて・・・というやり方も考えていたのですが、
> ただ見た目上の問題から却下しました。
650個は多すぎます。
インスタンスを生成する処理というのはそれ自体がまず重い処理です。
大量のインスタンス生成は時間がかかります。
また、コントロールの場合、Windowsのシステムリソースも消費するため、
浪費はよくありません。

>>650個もラベル貼るよりPaintでやればもっとマシになるかもしれない
>>けど。
> 上で言っている、Paintとはどういうことですか?

Paintイベントで自分で必要な表示を自前描画するということでしょう。

> 一応ラベルを大量に貼っている理由ですが、
> あるモノの配置をラベルの背景色を換えることによって
> 画面上で再現するPGを作っています。

枠があって文字列が表示できればよい、という程度ならば、
PictureBoxにでも自前描画した方がよいと思います。
#ラベルを配置するだけに比べてだいぶ工数はかかると思いますが。
■No2724に返信(IBugFactoryさんの記事)
> Paintというのは、Formをキャンバスに見たてて、そこでお絵かき
> するようなもんです。
> いろんな色のついたPenを持って、楕円を書いたり、塗りつぶし
> の■を書いたり。Windowsについてるペイントそのままな感じ。
>
> それがForm上でプログラムからビシバシできると。
Graphicsオブジェクトを用いるってことですよね。
それなら、過去にやったことがあります。
あるといっても、直線や円を描いた程度ですが。。。

コントロールを用いるか、Paintで書くは検討してみます。
ありがとうございました。

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